使用C ++中的Linux系统调用获取我的孩子的pid

时间:2009-06-23 21:35:38

标签: c++ linux

我有一个与启动另一个进程的库接口的进程。偶尔这个过程会卡住,我的程序会阻塞对库的调用。我想检测这是什么时候发生的(我现在正在做),并向所有这些我孩子的挂起进程发送一个kill信号。

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

3 个答案:

答案 0 :(得分:3)

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    FILE *fp = popen("ps -C *YOUR PROGRAM NAME HERE* --format '%P %p'" , "r");
    if (fp == NULL)
    {
        printf("ERROR!\n");
    }

    char parentID[256];
    char processID[256];
    while (fscanf(fp, "%s %s", parentID, processID) != EOF)
    {
         printf("PID: %s  Parent: %s\n", processID, parentID);

         // Check the parentID to see if it that of your process
    }

    pclose(fp);

    return 1;
}

答案 1 :(得分:2)

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

答案 2 :(得分:1)

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

这个库必须非常蹩脚。你与它的供应商有什么样的交易?你能不能得到他们的支持来修复它吗?