-
使用waitpid(pid, status,0);填入子进程的pid,阻塞父进程,直到子进程结束了,然后把子进程的pcb结构体的状态码读取出来。
-
使用WIFEXITED(status)判断子进程是否正常退出,WEXITSTATUS(status)读取退出码来判断运行是否正常结束。
因为进程结束有3种情况:1.进程正常退出,并正确结束。2.进程正常退出,但是不正确结束。3进程被强制退出。
所以使用这两个宏定义函数可以判断一些情况 -
替换函数
execl将程序加载进程内存中。
int execl(const char *path, const char *arg, ...);
进程程序替换
进程替换本质是将指定的程序替换到原有的内存, 如果使用execl(),之后的代码后面就不会运行了。只要调用成功就接下来的代码就无关了。
perror()打印错误原因
使用execl()作为子进程,然后父进程可以与子进程相互独立运行
-
make默认只生成一个可执行程序
.PHONY:all
all: mybin mychild
mychild:mychild.c
gcc -o mychild mychild.c
mybin:mybin.c
gcc -o mybin mybin.c -
环境变量
使用environ传入系统环境变量,传入自定义环境变量方法putenv((char*)"myenv=1122");