Linux中,父进程获取子进程可通过
ps -ef
查看所有进程及父子关系,或用pgrep -P [父进程PID]
查找特定子进程PID,也可通过读取/proc/[父进程PID]/task
目录下的进程号获取Linux系统中,父进程可以通过多种方式获取子进程的相关信息,以下是几种常见的方法:
使用系统调用
- fork():这是创建子进程最常用的系统调用,当父进程调用fork()时,会创建一个子进程,子进程是父进程的副本,fork()在父进程中返回子进程的PID(进程标识符),在子进程中返回0。
#include <stdio.h> #include <unistd.h> int main() { pid_t pid = fork(); if (pid > 0) { // 父进程 printf("父进程,子进程PID:%d ", pid); } else if (pid == 0) { // 子进程 printf("子进程,父进程PID:%d ", getppid()); } else { // fork失败 perror("fork failed"); } return 0; }
- wait()和waitpid():这两个函数用于父进程等待子进程结束,wait()会阻塞父进程,直到任意一个子进程结束,并回收子进程资源,返回子进程的PID,waitpid()则更灵活,可以指定等待某个特定的子进程,还可以设置非阻塞模式等。
#include <stdio.h> #include <sys/types.h> #include <sys/wait.h> int main() { pid_t pid = fork(); if (pid > 0) { // 父进程 int status; pid_t child_pid = wait(&status); printf("等待到子进程%d结束 ", child_pid); } else if (pid == 0) { // 子进程 sleep(2); } else { perror("fork failed"); } return 0; }
通过进程关系文件查看
- /proc文件系统:在Linux中,/proc目录是一个虚拟文件系统,包含了当前运行进程的各种信息,每个进程都有一个对应的目录,例如进程PID为1234,其相关信息在/proc/1234目录下。/proc/[PID]/status文件包含了进程的状态信息,包括父进程ID(PPID)等;/proc/[PID]/cmdline文件保存了进程的命令行参数,父进程可以通过读取这些文件来获取子进程的信息,要获取子进程的命令行参数,可以使用以下命令:
cat /proc/[子进程PID]/cmdline | tr '