用fork()创处一个子进程。 子进程用execl或execve执行1s命令。 父进程调用waitpid的数等待子进程结束后,打印“child ended, father ending
时间: 2024-10-10 20:07:52 浏览: 30
在Unix/Linux系统中,你可以使用`fork()`函数创建一个新的子进程。`fork()`函数会返回两个进程ID(PID),一个是父进程的,另一个是新创建子进程的。如果`fork()`成功,父进程将得到0;而子进程则会得到其自身的PID。
一旦创建了子进程,你可以通过`execl()`或`execve()`这两个系统调用来替换子进程的当前进程映射,让子进程开始执行新的程序。这两个函数用于执行指定的命令并完全替换进程的执行环境。例如:
```c
#include <unistd.h>
#include <sys/wait.h>
int main() {
pid_t child_pid = fork(); // 创建子进程
if (child_pid == 0) { // 如果是子进程
execl("/bin/sleep", "sleep", "1", NULL); // 执行1秒命令
} else if (child_pid > 0) { // 父进程
wait(NULL); // 等待子进程结束
printf("child ended, father ending.\n"); // 子进程退出后,打印信息
} else { // fork失败的情况
perror("fork failed");
return 1;
}
return 0;
}
```
在这个例子中,父进程调用`waitpid(-1, NULL, WUNTRACED)`来阻塞,直到子进程结束。当子进程执行完`sleep 1`命令后,它会被系统终止,然后父进程继续运行并打印出提示。
阅读全文