进程控制2

  1. 使用waitpid(pid, status,0);填入子进程的pid,阻塞父进程,直到子进程结束了,然后把子进程的pcb结构体的状态码读取出来。

  2. 使用WIFEXITED(status)判断子进程是否正常退出,WEXITSTATUS(status)读取退出码来判断运行是否正常结束。
    因为进程结束有3种情况:1.进程正常退出,并正确结束。2.进程正常退出,但是不正确结束。3进程被强制退出。
    所以使用这两个宏定义函数可以判断一些情况

  3. 替换函数
    execl将程序加载进程内存中。
    int execl(const char *path, const char *arg, ...);
    进程程序替换
    进程替换本质是将指定的程序替换到原有的内存, 如果使用execl(),之后的代码后面就不会运行了。只要调用成功就接下来的代码就无关了。

perror()打印错误原因

使用execl()作为子进程,然后父进程可以与子进程相互独立运行

  1. make默认只生成一个可执行程序
    .PHONY:all
    all: mybin mychild
    mychild:mychild.c
    gcc -o mychild mychild.c
    mybin:mybin.c
    gcc -o mybin mybin.c

  2. 环境变量
    使用environ传入系统环境变量,传入自定义环境变量方法putenv((char*)"myenv=1122");

  3. 在/proc/进程pid号下,可以看到进程很多的信息,其中就有进程现在的pwd工作目录,可以通过chdir来更改pwd的目录。这就是内置命令。

然后如果使用子进程来执行execl,那么在执行cd命令之后,只会子进程修改工作目录,所以是在父进程shell中先修改工作目录。

posted @   zhudachang  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示