)编写一段程序,使用系统调用fork()创建一个子进程。在子进程中,用系统调用 getid()获得子进程TD。在父进程中,通过系统调用 wait()来阻塞白己,并等待收集子进程的进程ID,把它彻底销毁后返回。
时间: 2024-10-26 22:17:22 浏览: 20
进程的创建编写一段程序,使用系统调用fork()创建两个子进程。当此程序运行时,
5星 · 资源好评率100%
在Linux或Unix系统中,你可以使用C语言的标准库函数`fork()`、`waitpid()`和`gettid()`来完成这个任务。下面是一个简单的示例程序:
```c
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
int main() {
pid_t child_pid; // 子进程PID
tid_t child_tid; // 子进程TID
// 创建子进程
if ((child_pid = fork()) == -1) {
perror("Fork failed");
return 1;
}
if (child_pid == 0) { // 子进程
// 在子进程中获取TID
child_tid = syscall(SYS_gettid);
printf("Child process with PID %d and TID %d\n", getpid(), child_tid);
// 父进程需要等待子进程结束
} else { // 父进程
// 阻塞并等待子进程结束
int status;
pid_t result = waitpid(child_pid, &status, 0);
if (result == -1) {
perror("Waitpid failed");
return 1;
}
printf("Parent process received the exit status of child: %d\n", WIFEXITED(status) ? WEXITSTATUS(status) : WIFSIGNALED(status));
printf("Child with PID %d has been terminated.\n", child_pid);
}
return 0;
}
```
在这个程序中,`fork()`用于创建子进程,如果返回0,则表示当前进程是新创建的子进程;否则返回的是子进程的PID。然后,在子进程中,我们使用`syscall(SYS_gettid)`获取当前线程的TID。
父进程则通过`waitpid()`等待子进程结束,当子进程结束后,父进程会接收子进程的状态信息。注意,`waitpid()`函数会阻塞直到子进程结束,并返回其退出状态。
阅读全文