仅从父 ID (minix) 获取子进程 ID 的 C 程序



因此,给定传递到系统调用的过程ID,我需要返回所有子进程ID。这必须用C写成。我已经使用MPROC来获取子pid的父进程,并列出了从某个索引中列出所有过程,但不能从中跃升。

我的代码:

int do_getchildpids() {
// get pid from parameter   
int ppid = m_in.m1_i1; 
// Get the child pid of this process 
pid_t cpid;

if (cpid == fork()) {
    printf("Child pid for ppid %d is %dn", ppid, getpid());
}


// ** Other attempt at this problem below **


// if mp_parent == ppid then print pid
int idx = 0;
int cpid = mproc[idx].mp_pid;
while (mproc[idx].mp_pid) {

    idx++;
}
printf("Searching for children of %d...n", ppid);
if (pid == 0) {
    // for loop that gets the ppid, checks against given ppid
    // prints out pid if true
    if (cpid) {
        // loop through proc table checking if ppid is equal to parameter passed
        if (ppid == mproc[mproc[i].mp_parent].mp_pid)
            printf("Child pid is %d.n", getpid());
    }
    printf("Child pid is: %d.n", getpid());
} else {
    printf("Error, child pid was not set or is -1n");
}
return 0;
}

这是一个非常笨拙的解决方案,但是如果您正在运行linux,并且想获得父程进程的孩子,则可以使用linux pgrep命令,要么使用 fork() and execv()或通过简单的system()调用。然后将输出输送到文件,然后读取该文件的内容

system("pgrep -P [parent_pid] 1>[outputfile]")
fp = fopen([outputfile], "r")
while (fscanf(fp, "%d", &child_pid) != EOF){
    <add child_pid to a list you've made>
}
fclose(fp)

肯定有一种更好的方法可以做到这一点。查看是否可以从C程序调用pspgrep

相关内容

  • 没有找到相关文章

最新更新