• Linux 下子进程与父进程的关系


    我们知道,Linux下父进程可以使用fork 函数创建子进程,但是当父进程先退出后,子进程会不会也退出呢?

    通过下面这个小实验,我们能够很好的看出来:

    /********  basic.c ********/
    1
    #include "basic.h"

    2 3 pid_t Fork(void) 4 { 5 pid_t pid = fork(); 6 if (pid < 0) { 7 fprintf(stderr, "Fork error: %s ", strerror(errno)); 8 exit(0); 9 } 10 11 return pid; 12 }
     1 **********  basic.h  ***********
     2 
     3 #ifndef __CSAPP_BASIC_H
     4 #define __CSAPP_BASIC_H
     5 
     6 #include <stdio.h>
     7 #include <errno.h>
     8 #include <stdlib.h>
     9 #include <signal.h>
    10 #include <unistd.h>
    11 #include <string.h>
    12 /* function definition concerned with basic.c */
    13 pid_t Fork();
    14 
    15 #endif
     1 *******  fork.c  *********
     2 
     3 #include "basic.h"
     4 
     5 int main()
     6 {
     7     int pid = Fork();
     8     int x = 2;
     9 
    10     if (pid == 0) {
    11         printf("child: pid = %d, ppid = %d, x = %d
    ", getpid(), getppid(), ++x);
    12         sleep(3);
    13         
    14         printf("child: pid = %d, ppid = %d, x = %d
    ", getpid(), getppid(), ++x);
    15         exit(0);
    16     }
    17 
    18     printf("parent: pid = %d, ppid = %d, x = %d
    ", getpid(), getppid(), --x);
    19 
    20 }

    通过 gcc fork.c basic.c -o fork 编译即可的 fork 程序。 运行 ./fork
    可以看出父进程首先退出,退出前child的PPID为12256, 退出后子进程的PPID变为了 1.说明父进程退出后的子进程由 init 超级进程1领养。而该进程是不绝不会退出的。
  • 相关阅读:
    软工结对第一次作业
    16061023-软件工程第1次作业
    OO最后一次总结
    OO第三次博客作业
    OO第二次博客作业
    OO第一次博客
    提问回顾与个人总结
    软件工程第一次阅读作业
    test个人博客
    软件工程结对作业
  • 原文地址:https://www.cnblogs.com/chenchenluo/p/3287438.html
Copyright © 2020-2023  润新知