【问题标题】:For waitpid, how do I know if the child finishes its process?对于waitpid,我怎么知道孩子是否完成了它的进程?
【发布时间】:2016-11-06 00:49:11
【问题描述】:

首先,我fork一个孩子做某事, 我使用waitpid(-1, &child_status, WNOHANG);在父母中让父母继续而不是等待孩子完成。

我怎么知道孩子什么时候完成了它的过程?

【问题讨论】:

    标签: c fork waitpid


    【解决方案1】:

    您可以为SIGCHLD 设置一个信号处理程序,该处理程序会在子进程退出时自动发送。

    然后信号处理器可以设置一个全局标志,该标志可以在程序的其他部分定期检查。如果设置了标志,则调用waitwaitpid 以获取孩子的退出状态。

    int child_exit_flag = 0;
    
    void child_exit(int sig)
    {
        child_exit_flag = 1;
    }
    
    ...
    
    signal(SIGCHLD, child_exit);
    
    ...
    
    if (child_exit_flag) {
        pid_t pid;
        int status;
    
        child_exit_flag = 0;
        pid = wait(&status);
        printf("child pid %d exited with status %d\n", pid, status);
    }
    

    【讨论】:

      猜你喜欢
      • 2016-09-28
      • 2014-09-23
      • 1970-01-01
      • 2023-04-08
      • 1970-01-01
      • 2017-07-17
      • 2018-09-24
      • 1970-01-01
      • 2011-11-18
      相关资源
      最近更新 更多