在我正在开发的基于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>。
| 归档时间: |
|
| 查看次数: |
20158 次 |
| 最近记录: |