liunx获取子进程pid
时间: 2023-09-19 11:02:00 浏览: 190
在Linux中,可以通过调用fork()创建子进程,并使用wait()或waitpid()等函数来获取子进程的PID。
fork()函数会在调用时创建一个新的进程作为子进程,并返回子进程的PID。子进程从fork()调用处开始执行,而父进程会继续执行原来的代码。因此,在父进程中,可以通过fork()的返回值获取子进程的PID。
以下是一个示例代码:
```c
#include <stdio.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
int main() {
pid_t pid = fork();
if (pid == -1) {
// 处理错误情况
perror("fork failed");
return 1;
} else if (pid == 0) {
// 子进程代码
printf("Child process: PID=%d\n", getpid());
sleep(5); // 子进程休眠5秒
_exit(0); // 子进程退出
} else {
// 父进程代码
printf("Parent process: PID=%d, child PID=%d\n", getpid(), pid);
int status;
pid_t child_pid = wait(&status); // 等待子进程退出
if (child_pid == -1) {
perror("wait failed");
return 1;
}
if (WIFEXITED(status)) {
printf("Child process %d exited normally with status %d\n", child_pid, WEXITSTATUS(status));
} else if (WIFSIGNALED(status)) {
printf("Child process %d terminated by signal %d\n", child_pid, WTERMSIG(status));
}
}
return 0;
}
```
在该示例代码中,调用fork()后,父进程会输出自身的PID和子进程的PID,并调用wait()函数等待子进程退出。子进程会输出自身的PID,并在休眠5秒后调用_exit()退出。
可以通过编译该代码并运行,观察输出结果,可以看到父进程和子进程的PID。
阅读全文