使用代码验证linux子进程与父进程的关系

 更新时间:2014年02月21日 16:39:16   作者:  
Linux下父进程可以使用fork 函数创建子进程,但是当父进程先退出后,子进程会不会也退出呢?通过下面这个小实验,我们能够很好的看出来

复制代码 代码如下:

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

pid_t Fork(void)
{
    pid_t pid = fork();
    if (pid < 0) {
        fprintf(stderr, "Fork error: %s\n", strerror(errno));
        exit(0);
    }

    return pid;
}

复制代码 代码如下:

**********  basic.h  ***********

#ifndef __CSAPP_BASIC_H
#define __CSAPP_BASIC_H

#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
#include <string.h>
/* function definition concerned with basic.c */
pid_t Fork();

#endif

复制代码 代码如下:

*******  fork.c  *********

#include "basic.h"

int main()
{
    int pid = Fork();
    int x = 2;

    if (pid == 0) {
        printf("child: pid = %d, ppid = %d, x = %d\n", getpid(), getppid(), ++x);
        sleep(3);

        printf("child: pid = %d, ppid = %d, x = %d\n", getpid(), getppid(), ++x);
        exit(0);
    }

    printf("parent: pid = %d, ppid = %d, x = %d\n", getpid(), getppid(), --x);

}

通过 gcc fork.c basic.c -o fork 编译即可的 fork 程序。  运行 ./fork

可以看出父进程首先退出,退出前child的PPID为12256, 退出后子进程的PPID变为了 1.说明父进程退出后的子进程由 init 超级进程1领养。而该进程是不绝不会退出的。

相关文章

  • C++实现LeetCode165.版本比较)

    C++实现LeetCode165.版本比较)

    这篇文章主要介绍了C++实现LeetCode165.版本比较),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • 浅析结束程序函数exit, _exit,atexit的区别

    浅析结束程序函数exit, _exit,atexit的区别

    在一个程序中最多可以用atexit()注册32个处理函数,这些处理函数的调用顺序与其注册的顺序相反,也即最先注册的最后调用,最后注册的最先调用
    2013-09-09
  • C语言安全编码数组记法的一致性

    C语言安全编码数组记法的一致性

    这篇文章主要介绍了C语言安全编码数组记法的一致性,需要的朋友可以参考下
    2014-07-07
  • C语言实现单元测试的示例详解

    C语言实现单元测试的示例详解

    单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。这篇文章主要为大家介绍了C语言实现单元测试的方法,需要的可以参考一下
    2022-09-09
  • Qt图形图像开发之Qt曲线图美化QChart QScatterSeries 空心点阵图,鼠标移动到上面显示数值,鼠标移开数值消失效果实例

    Qt图形图像开发之Qt曲线图美化QChart QScatterSeries 空心点阵图,鼠标移动到上面显示数值,鼠标移开

    这篇文章主要介绍了Qt图形图像开发之Qt曲线图美化QChart QScatterSeries 空心点阵图,鼠标移动到上面显示数值,鼠标移开数值消失效果实例,需要的朋友可以参考下
    2020-03-03
  • ACE反应器(Reactor)模式的深入分析

    ACE反应器(Reactor)模式的深入分析

    本篇文章是对ACE反应器(Reactor)模式进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • VC++ 2019 "const char*"类型的实参与"LPCTSTR"类型的形参不兼容解决

    VC++ 2019 "const char*"类型的实参与"LPCTSTR"

    这篇文章主要给大家介绍了关于VC++ 2019 "const char*"类型的实参与"LPCTSTR"类型的形参不兼容的解决方法,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2023-03-03
  • C语言二叉树层序遍历

    C语言二叉树层序遍历

    这篇文章主要介绍了C语言二叉树层序遍历,文章基于C语言的相关资料展开详细的文章内容,具有一定的参考价值,需要的小伙伴可以参考一下,希望对你的学习有所帮助
    2022-04-04
  • C++浅析内联函数的使用

    C++浅析内联函数的使用

    为了消除函数调用的时空开销,C++ 提供一种提高效率的方法,即在编译时将函数调用处用函数体替换,类似于C语言中的宏展开。这种在函数调用处直接嵌入函数体的函数称为内联函数(Inline Function),又称内嵌函数或者内置函数
    2022-05-05
  • C语言实现简单猜拳小游戏

    C语言实现简单猜拳小游戏

    这篇文章主要为大家详细介绍了C语言实现简单猜拳小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-03-03

最新评论