zoukankan      html  css  js  c++  java
  • wait函数

    当一个进程正常或异常终止时,内核就向其父进程发送SIGCHLD信号。子进程终止是一个异步事件(其能够在父进程运行的任何时候发生)。

    对于wait(),其调用者,即父进程可以有如下状态:

    • 如果其所有子进程都还在运行,则阻塞;
    • 如果一个子进程已终止,正等待父进程获取其终止状态,则取得该子进程的终止状态后立即返回;
    • 如果它没有任何子进程,则立即出错返回;

    代码测试:

     1 #include <stdio.h>
     2 #include <unistd.h>
     3 #include <stdlib.h>
     4 
     5 int main(void)
     6 {
     7     pid_t pid_f = getpid();
     8     pid_t pid_c;
     9     pid_f = fork();
    10     if(pid_f < 0) {
    11         printf("fork error
    ");
    12     }
    13     else if(pid_f == 0) {
    14         printf("child process start
    ");
    15         sleep(10);
    16     }
    17     else {
    18         printf("father process goes on
    ");
    19         wait(NULL);
    20         printf("child process exited
    ");
    21     }
    22     printf("wait for child exit %d
    ",pid_f);
    23     return 0;
    24 }

    执行结果:

    最初执行:

    root@ubuntu:/home/test# ./wait_test
    father process goes on
    child process start

     父进程创建子进程后,调用wait(),发生阻塞,等待一个子进程退出;子进程休眠10秒后执行后续操作。

    10秒后:

    root@ubuntu:/home/test# ./wait_test
    father process goes on
    child process start
    wait for child exit 0
    child process exited
    wait for child exit 6038

    子进程休眠结束后,输出“wait for child exit 0”,其进程号表明其为子进程输出结果。父进程输出“wait for child exit 6038”,其进程号表明其为父进程输出结果。

  • 相关阅读:
    [NOI2016]循环之美(杜教筛)
    [CF600E]Dsu on tree
    [POI2015]Myjnie
    [POI2015]Odwiedziny
    [POI2015]Logistyka
    [POI2015]Wilcze doły
    [POI2017]Sabotaż
    [BZOJ3928/4048]Outer space invaders
    [BZOJ5109]大吉大利,晚上吃鸡!
    [AGC016E]Poor Turkeys
  • 原文地址:https://www.cnblogs.com/scu-cjx/p/7723817.html
Copyright © 2011-2022 走看看