使用fork()、wait()、exit()等进程控制系统调用,编写C语言程序,分析进程控制过程
时间: 2024-05-10 20:21:12 浏览: 91
下面是一个简单的例子,展示了如何使用fork()、wait()和exit()来控制进程:
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
int main() {
int pid = fork(); // 创建子进程
if (pid < 0) {
perror("fork");
exit(1);
} else if (pid == 0) { // 子进程
printf("Child process: pid=%d, ppid=%d\n", getpid(), getppid());
exit(0);
} else { // 父进程
printf("Parent process: pid=%d, child=%d\n", getpid(), pid);
wait(NULL); // 等待子进程结束
printf("Child process has terminated.\n");
exit(0);
}
return 0;
}
```
在这个例子中,父进程调用fork()创建了一个子进程。子进程打印出自己的进程ID和父进程ID,然后调用exit()结束自己的进程。父进程打印出自己的进程ID和子进程ID,然后调用wait()等待子进程结束。当子进程结束后,父进程打印出一条消息并调用exit()结束自己的进程。
这个例子展示了如何使用fork()创建一个新的进程,并使用wait()等待子进程的结束。在父进程中,wait()会阻塞直到子进程结束。如果父进程不调用wait(),它将继续执行直到结束,而子进程则会成为一个孤儿进程。
在子进程中,调用exit()结束进程。在这个例子中,我们传递了一个参数0作为exit()的返回值。这个返回值会被父进程所接收,可以用来表示子进程的状态。
总之,使用fork()、wait()和exit()等进程控制系统调用可以方便地创建和管理多个进程。需要注意的是,在创建子进程后,父进程和子进程将运行相同的代码,但是进程ID和父进程ID不同。可以使用getpid()和getppid()来获取进程ID和父进程ID。
阅读全文