fork & zombie

来源:互联网 发布:unity3d 物体穿过地面 编辑:程序博客网 时间:2024/06/07 11:07
#include <stdio.h>#include <unistd.h>#include <sys/wait.h>int main(int argc, char *argv[]){#if 0                    // zombie    pid_t pid = fork();    if(pid == 0){        puts("Him Iam a child process");    }else{        printf("Child Process ID: %d\n", pid);        sleep(30);    }    if(pid == 0){        puts("End child process");        }else{        puts("End parent process");    }    return 0;#else                    #if 0                // wait - block    int status;        pid_t pid = fork();    if(pid == 0){        puts("Him I am a child process");        return 7;    }else{        printf("Child Process ID: %d\n", pid);        wait(&status);        if(WIFEXITED(status))            printf("End child process: %d\n", WEXITSTATUS(status));                sleep(30);                puts("End parent process");    }    return 0;#else                 // waitpid -- no block    int status;        pid_t pid = fork();    if(pid == 0){        puts("Him I am a child process");        sleep(15);        return 7;    }else{        printf("Child Process ID: %d\n", pid);        //wait(&status);                while(!waitpid(-1,&status, WNOHANG)){            sleep(3);            puts("sleep 3sec.");        }        if(WIFEXITED(status))            printf("End child process: %d\n", WEXITSTATUS(status));                sleep(30);                puts("End parent process");    }    return 0;#endif#endif}

0 0
原创粉丝点击