在我正在开发的基于Linux的项目中,我需要能够找到所有子进程.每次开始记录都是不可行的 - 它们需要在事后发现.这需要是纯C,我想在没有读/ proc的情况下这样做.有谁知道如何做到这一点?
您可以使用popen
就像是。(希望语法足够接近)
#include <stdio.h> #include <unistd.h> #include <stdlib.h> int main(int argc,char * argv []) { FILE * fp = popen(“ ps -C *您的程序名称在这里* --format'%P%p'”,“ r”); 如果(fp == NULL) { printf(“ ERROR!\ n”); } char parentID [256]; char processID [256]; 而(fscanf(fp,“%s%s”,parentID,processID)!= EOF) { printf(“ PID:%s父级:%s \ n”,processID,parentID); //检查parentID以查看是否与您的进程相同 } pclose(fp); 返回1; }
通常,每次启动子进程时都记录下来是完全可行的。方便地,父进程被传递子进程的pid值作为创建它的fork调用的返回值。
如手册页所述:
pid_t fork(void);
Run Code Online (Sandbox Code Playgroud)
如果您能告诉我们您为什么认为这不可行,这将有所帮助。
我发现你的评论是,记录进程的创建是不可行的,但如果你真的不能(可能是因为你不知道会创建多少并且不想保留realloc
内存),然后我可能会打开所有与 glob 匹配的文件/proc/[1-9]*/status
并查找说明我的进程 IDPPid: <num>
在哪里的行<num>
。