繁体   English   中英

检查子进程的状态

[英]Checking the status of child process

嗨,我是c编程的新手。我有以下代码,基本上该程序需要检查子进程的状态,父进程要等到子进程终止后再打印“子进程终止”。 但是我尝试了WNOHANG,但是以某种方式我的第二次检查不起作用/或者我无法停止子进程。 有想法吗? 提前致谢。

码:

#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>

int main()
{
    int pid;
    int ppid;
    int status;
    pid=vfork();
    pid_t return_pid = waitpid(pid, &status, WNOHANG);

    if (pid<0) {
        printf("\n Error ");
        exit(1);
    } else if (pid==0) {
        printf("\n Hello I am the child process ");
        printf("\n My pid is %d %d ",return_pid, getpid());
        exit(0);
    } else if (return_pid == pid) {
            printf("child is finished %d %d", return_pid, pid);
            exit(0);
    } else {
        printf("\n Hello I am the parent process %d %d", return_pid, pid);
        printf("\n My actual pid is %d %d \n ",return_pid, getpid());
        exit(1);
    }
}

我想知道您的waitpid是否在错误的位置。 检查man 2 wait并阅读pid的参数代表什么

pid参数指定要等待的子进程集。 如果pid为-1,则调用等待任何子进程。 如果pid为0,则调用等待调用者的进程组中的任何子进程。 如果pid大于零,则调用等待进程ID为pid的进程。 如果pid小于-1,则调用等待进程组ID等于pid的绝对值的任何进程。

对我来说,粗体字表示孩子可能正在等待自己吗? vfork的值将为子级返回0。

同样,如果孩子没有退出,WNOHANG选项将导致waitpid立即返回,这意味着父级不会等待孩子完成。 如果子进程已完成,则它将返回子进程的pid。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM