【问题标题】:Given a child PID how can you get the parent PID给定一个子 PID,如何获得父 PID
【发布时间】:2016-05-25 18:24:50
【问题描述】:

我正在做一个项目,我有许多 PID,我必须找出其中哪些是僵尸进程,然后杀死它们的父进程以杀死最初的僵尸进程。我不确定是否有任何方法可以找出给定 PID 的 PPID 是什么。任何帮助将不胜感激。

【问题讨论】:

  • libproc 中的 get_proc_stats 可以满足您的需求。似乎它已从公共界面中删除。另一种方法是使用openprocreadproc 来获取pid。我会发布一个答案,但我自己无法让它工作(在readproc 中崩溃)。我不知道您使用的是哪个操作系统,因此可能不适用。进一步阅读hereherehere
  • 最佳答案可能取决于您所针对的操作系统。对于 Linux,有 /proc 文件系统;在 BSD 上,您需要致电 sysctl()。我不知道其他系统...

标签: c fork pid


【解决方案1】:

函数getppid() 做到了:

#include <unistd.h>

int main()
{
    pid_t ppid;

    ppid = getppid();

    return (0);
}

【讨论】:

  • 这显然只会得到调用进程的父pid。 OP 希望对任意进程执行此操作,其中一些可能是僵尸进程,因此这并不能解决问题。
【解决方案2】:

在 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。 我从未使用过这个,但根据作者的说法,这可能会有所帮助。

【讨论】:

    猜你喜欢
    • 2022-11-24
    • 1970-01-01
    • 2023-04-04
    • 2021-02-10
    • 2012-02-27
    • 1970-01-01
    • 2011-12-26
    • 2023-04-06
    • 2012-03-07
    相关资源
    最近更新 更多