检查进程是否已在C中终止

检查进程是否已在C中终止,c,linux,wait,C,Linux,Wait,我在尝试用C语言编写函数时遇到了麻烦 基本上,它应该做的是:它首先检查特定进程是否已终止。如果有,则将终止进程的返回值递增到列表中。如果它还没有终止,它会一直等到终止 我已经阅读了手册(等等)并对这一主题进行了研究,但发现理解这一点非常混乱 我有两个预先存在的列表: 包含所有子进程pid的子进程pid child_return_values,返回值应递增的列表 我还有一个常量child_pids_size,它是列表child_pids的大小 以下是我迄今为止所做的工作: void wait_

我在尝试用C语言编写函数时遇到了麻烦

基本上,它应该做的是:它首先检查特定进程是否已终止。如果有,则将终止进程的返回值递增到列表中。如果它还没有终止,它会一直等到终止

我已经阅读了手册(等等)并对这一主题进行了研究,但发现理解这一点非常混乱

我有两个预先存在的列表:

  • 包含所有子进程pid的子进程pid
  • child_return_values,返回值应递增的列表
我还有一个常量child_pids_size,它是列表child_pids的大小

以下是我迄今为止所做的工作:

void wait_process(){

    int i, child_state, value;
    pid_t child_pid, rc_pid;

    for(i = 0; i < child_pids_size; i++){

    child_pid = child_pids[i];

    rc_pid = waitpid(child_pid,&child_state,0);

    if(rc_pid > 0){

        //if the process terminated
        if (WIFEXITED(child_state)){


        //it increments the position of the process
        // in the list with the returned value of waitpid
        value = child_return_values[i];
        value = value + rc_pid;
        child_return_values[i] = value;

        }

        else{
        perror("An error occurred!");
        exit(1);

        }

    }


}


}
void wait_进程(){
int i,子状态,值;
pid_t child_pid,rc_pid;
对于(i=0;i0){
//如果进程终止
如果(妻子退出(子女国)){
//它增加了进程的位置
//在返回值为waitpid的列表中
value=child_return_value[i];
值=值+rc_pid;
子_返回_值[i]=值;
}
否则{
perror(“发生错误!”);
出口(1);
}
}
}
}
我假设“已终止进程的返回值”是指子进程的退出值(即调用exit()时进程使用的值)


要获得它,可以使用WEXITSTATUS()宏,使用child_state作为参数。

是的,完全正确。谢谢