【发布时间】:2016-05-25 18:24:50
【问题描述】:
我正在做一个项目,我有许多 PID,我必须找出其中哪些是僵尸进程,然后杀死它们的父进程以杀死最初的僵尸进程。我不确定是否有任何方法可以找出给定 PID 的 PPID 是什么。任何帮助将不胜感激。
【问题讨论】:
-
最佳答案可能取决于您所针对的操作系统。对于 Linux,有
/proc文件系统;在 BSD 上,您需要致电sysctl()。我不知道其他系统...
我正在做一个项目,我有许多 PID,我必须找出其中哪些是僵尸进程,然后杀死它们的父进程以杀死最初的僵尸进程。我不确定是否有任何方法可以找出给定 PID 的 PPID 是什么。任何帮助将不胜感激。
【问题讨论】:
/proc 文件系统;在 BSD 上,您需要致电 sysctl()。我不知道其他系统...
函数getppid() 做到了:
#include <unistd.h>
int main()
{
pid_t ppid;
ppid = getppid();
return (0);
}
【讨论】:
在 ps 命令的源代码中,proc/readproc.h 中定义了一个名为 get_proc_stats 的函数,它(除其他外)返回给定 pid 的父 pid。您需要安装libproc-dev 才能获得此功能。然后你可以这样做:
#include <proc/readproc.h>
void printppid(pid_t pid) {
proc_t process_info;
get_proc_stats(pid, &process_info);
printf("Parent of pid=%d is pid=%d\n", pid, process_info.ppid);
}
这取自here。 我从未使用过这个,但根据作者的说法,这可能会有所帮助。
【讨论】: