检查进程是否已在 C 中终止
Checking if a process has terminated in C
我在尝试用 C 编写函数时遇到了困难。
基本上它应该做的是:它首先检查特定进程是否已终止。如果有,它会将已终止进程的 returned 值递增到列表中。如果它没有终止,它会一直等到终止。
我已经阅读了手册(等等)并对该主题进行了研究,但发现理解这一点非常混乱。
我有两个预先存在的列表:
- child_pids,其中包含所有子进程的 pid。
- child_return_values,这是 return 值应该递增的列表。
我还有一个常量,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);
}
}
}
}
我想 "the returned value of the terminated process" 指的是子进程的退出值(即调用 exit() 时进程使用的值)。
要获取它,您可以使用 WEXITSTATUS() 宏,使用 child_state 作为参数。
我在尝试用 C 编写函数时遇到了困难。
基本上它应该做的是:它首先检查特定进程是否已终止。如果有,它会将已终止进程的 returned 值递增到列表中。如果它没有终止,它会一直等到终止。
我已经阅读了手册(等等)并对该主题进行了研究,但发现理解这一点非常混乱。
我有两个预先存在的列表:
- child_pids,其中包含所有子进程的 pid。
- child_return_values,这是 return 值应该递增的列表。
我还有一个常量,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);
}
}
}
}
我想 "the returned value of the terminated process" 指的是子进程的退出值(即调用 exit() 时进程使用的值)。
要获取它,您可以使用 WEXITSTATUS() 宏,使用 child_state 作为参数。