编写一段程序,用系统调用 fork( )创建一个子进程。在子进程中,用系统调用 getid( )获得子进程 ID。在父进程中,用系统调用 wait( )来产生阻塞,并等待收集子进程 ID,把它彻底销毁后返回。
时间: 2024-10-06 09:06:41 浏览: 32
在Unix/Linux环境下,你可以使用`fork()`系统调用来创建一个新的子进程,而`getpid()`则是获取当前进程ID。`wait()`函数则可以让父进程阻塞直到子进程结束。下面是一个简单的C语言示例:
```c
#include <stdio.h>
#include <sys/wait.h>
#include <unistd.h>
#include <sys/types.h> // 包含pid_t类型
// 在父进程中执行的部分
int main() {
pid_t child_pid; // 存储子进程PID
pid_t parent_pid = getpid(); // 获取当前父进程ID
if (fork()) { // 如果是父进程
printf("Parent process PID: %d\n", parent_pid);
child_pid = wait(NULL); // 阻塞并等待子进程结束,子进程ID将被存储在child_pid中
printf("Child process PID after fork: %d\n", child_pid);
printf("Parent process exiting...\n");
return 0;
} else { // 如果是子进程
printf("Child process PID: %d\n", getpid());
sleep(1); // 让子进程暂停一段时间以便观察
printf("Child process exiting...\n");
exit(0); // 子进程结束
}
}
```
在这个例子中,如果主进程执行`fork()`,那么它将成为父进程,子进程会立即开始执行。子进程中首先打印出自身的PID,然后休眠一会儿,最后退出。父进程在`wait()`之后会打印出子进程的PID并结束。
阅读全文