【问题标题】:How to get all child process's PIDs when given the parent PID in C在C中给定父PID时如何获取所有子进程的PID
【发布时间】:2023-04-04 19:59:01
【问题描述】:

我知道这可以通过以下方式在 bash 中完成:pstree parent-pid。但是我该怎么做in C?有没有不需要迭代整个 /proc 文件系统的方法(例如系统调用/库函数)?

【问题讨论】:

标签: c linux unix parent-child


【解决方案1】:

您可以使用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;
}

【讨论】:

  • 使用ps -ef|awk '$3==parent-pid {print $2}'命令,cmd输出的每一行都是子进程的pid,所以你可以通过popen读取输出
  • 这个技巧实际上仍然使用我不想涉及的 linux shell 工具。因为与我的程序内部的情况相比,这可能是一项耗时的工作。看起来没有方便的 syscall/libcall 来解决这个问题
  • 但是pstree也调用ps命令。如果你不调用'ps',你必须写一个kenerl module
猜你喜欢
  • 2016-05-25
  • 1970-01-01
  • 2021-05-14
  • 2014-06-25
  • 2011-04-28
  • 2021-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多