【问题标题】:Getting the pid of my children using linux system calls in C++在 C++ 中使用 linux 系统调用获取我孩子的 pid
【发布时间】:2009-06-23 21:35:37
【问题描述】:

我有一个与启动另一个进程的库接口的进程。有时,这个过程会卡住,我的程序会在调用库时阻塞。我想检测这种情况何时发生(我目前正在这样做),并向所有这些挂起的我的子进程发送终止信号。

我知道杀死进程的命令,但是我无法获取我孩子的 pid。有谁知道这样做的方法吗?

【问题讨论】:

  • 为什么我把它读作“在 C++ 中使用 linux 系统调用摆脱我的孩子”
  • @Kibbee 我很乐意重定向他们的标准错误。

标签: c++ linux


【解决方案1】:
#include #include #include int main(int argc, char *argv[]) { FILE *fp = popen("ps -C *您的程序名称在这里* --format '%P %p'" , "r"); 如果(fp == NULL) { printf("错误!\n"); } 字符父ID[256]; 字符进程ID[256]; while (fscanf(fp, "%s %s", parentID, processID) != EOF) { printf("PID: %s Parent: %s\n", processID, parentID); // 检查 parentID 以查看它是否属于您的进程 } pclose(fp); 返回 1; }

【讨论】:

  • 我相信这会让我得到我父母的 pid,而不是我孩子的 pid
  • 它获取所有进程 pid 及其父进程 pid。如果父 pid 是您的进程之一,那么它就是您的子进程。你也可以用更严格的条件来看看这个类似的问题:stackoverflow.com/questions/1009552/…
【解决方案2】:

这个问题与前几天问的一个问题非常相似。我建议看一下here,看看你的答案是否令人满意。基本上你可能需要通读 /proc。

【讨论】:

    【解决方案3】:

    我不认为“ps”是答案。您可以自己迭代进程列表以查找您自己的进程的子进程,但最好修改库以便在您启动它们时提供 PID。

    这个库一定很蹩脚。你和它的供应商有什么样的交易?你不能得到他们的支持来解决它吗?

    【讨论】:

    • 我同意。如果您能够修改库以返回子 pid,这是一个更好的解决方案。
    • 我同意,但它是第三方库,我没有权限或能力更改。
    • 不过,您可能还是想在第三方的支持下提出问题,因为您需要一个在出现更严重问题时可以正常工作的渠道。
    猜你喜欢
    • 2021-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-14
    • 2014-06-08
    • 1970-01-01
    • 2011-02-11
    相关资源
    最近更新 更多