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

标签 c linux wait

我在尝试用 C 编写函数时遇到了困难。

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

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

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

  • child_pids,其中包含所有子进程的 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);

        }

    }


}


}

最佳答案

我想“终止进程的返回值”指的是子进程的退出值(即进程调用 exit() 时使用的值)。

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

关于检查进程是否已在 C 中终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29196705/

相关文章:

c程序在循环程序时重复游戏的尝试

linux - 如何在 ldap.conf 和 pam_ldap.conf 中为 proftpd 使用加密的用户 ID/密码

当数据复制/扫描/读取到未初始化的指针时崩溃或 "segmentation fault"

c++ - 内存碎片分析器

linux - 在 linux 系统上的 X86 体系结构的程序集中测试 db "Hello world"是什么意思

python - 如何强制 SAS 等待命令完全执行?

C 程序不从等待语句返回

C `signal` 参数太少

c - 在字符数组中寻找特定的一对位 '10' 或 '01'

Linux串口监听器和解释器?