系统调用 exec 和 fork()联合起来为程序员提供了强有力的功能。我们可以先用 fork()建立子进程,然后在子进程中使用 exec,这样就实现了父进程运行一个与其不同的子进程,并且父进程不会被覆盖。
#include <stdio.h> #include <unistd.h> #include <stdlib.h> int main(void) { int pid; pid = fork(); switch(pid) { case -1: perror("fork failed"); exit(1); case 0: execl("/bin/ls","ls","-l",NULL); perror("execl failed"); exit(1); default: wait(NULL); printf("completed\n"); exit(0); } return 0; }
在程序中,在调用 fork()建立一个子进程之后,马上调用了 wait(),使父进程在子进程
结束之前,一直处于睡眠状态。所以,wait()向程序员提供了一种实现进程之间同步的简单方法