我有一个与启动另一个进程的库接口的进程。偶尔这个过程会卡住,我的程序会阻塞对库的调用。我想检测这是什么时候发生的(我现在正在做),并向所有这些我孩子的挂起进程发送一个kill信号。
我知道杀死进程的命令,但是我无法获得我孩子们的pids。有谁知道这样做的方法?
答案 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。
这个库必须非常蹩脚。你与它的供应商有什么样的交易?你能不能得到他们的支持来修复它吗?