概述
- fork
- exec
- wait
- exit
fork
头文件 #include <stdlib.h>
创建一个子进程,初始具有与父进程同样的状态,根据fork的返回值不同来实现父进程/子进程的判断
exec
执行特定task
会把当前task抹除,从指定的文件中读取并加载指令,并替代当前调用进程的指令,从某种程度上来说,这样相当于丢弃了调用进程的内存,并开始执行新加载的指令
wait
头文件 #include <sys/wait.h>
等待子进程返回执行接下来操作(父进程会一直处于block状态,等待子进程执行结束后结束阻塞)
exit
头文件 #include <stdlib.h>
退出task,释放资源
常用代码框架
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
int main() {
int pid = fork();
if (pid == 0) { // child
printf("this is child \n");
// 子进程执行
execl("/bin/echo", "echo", "123", NULL);
// 执行失败
printf("echo exec failed! \n");
exit(1);
} else { // parent
// 阻塞等待子进程
wait(&pid);
printf("this is parent \n");
}
exit(0);
}
输出:
this is child
123
this is parent