繁体   English   中英

在 C 中给定父 PID 时如何获取所有子进程的 PID

[英]How to get all child process's PIDs when given the parent PID in C

我知道这可以通过以下方式在 bash 中完成: pstree parent-pid 但是我怎么能in C做到这一点? 是否有任何方法不必迭代整个 /proc 文件系统(例如系统调用/库函数)?

您可以使用popen读取命令ps -ef的输出,然后查找指定PID的所有子进程

int getAllChildProcess(pid_t ppid)
{
   char *buff = NULL;
   size_t len = 255;
   char command[256] = {0};

   sprintf(command,"ps -ef|awk '$3==%u {print $2}'",ppid);
   FILE *fp = (FILE*)popen(command,"r");
   while(getline(&buff,&len,fp) >= 0)
   {
     printf("%s\n",buff);
   }
   free(buff);
   fclose(fp);
   return 0;
}

@sundq 的答案是正确的,但有一个错误。

popen() 的文件描述符必须用pclose()而不是fclose关闭。 所以,只需替换fclose(fp); pclose(fp); .

参考: https://man7.org/linux/man-pages/man3/pclose.3.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM