考察父进程被终止后,子进程的不同状态

题目
在操作系统中,一个进程可以创建另一个进程。创建者称为父进程,被创建者成为子进程。当父进程被终止后,子进程可能有两种状态:

  • 子进程一并被终止;
  • 子进程成为孤儿进程,被init进程领养。

请在linux实验验证:什么情况下出现第一种结果,什么情况下出现第二种结果。

1.所需知识点汇总整理

进程管理基本语句

  • 查询进程

查询正在运行的进程信息

$ps -ef

查询系统的进程树,进而查看某个进程的父进程

$pstree

同时查询进程的id,和其父进程id

$ps -ef |grep <进程名>
$ps -o pid,ppid,comm
  • 终止进程

杀死指定id的进程

$kill PID

Fork函数

  • Fork函数的作用

一般来讲, 我们编写1个普通的c程序, 运行这个程序直到程序结束, 系统只会分配1个pid给这个程序, 也就就说, 系统里只会有一条关于这个程序的进程。 但是当执行Fork()函数之后,系统则会包含多条关于这个程序的进程。Fork()函数的作用是复制当前进程(包括进程在内存里的堆栈数据)为1个新的镜像. 然后这个新的镜像和旧的进程同时执行下去. 相当于本来1个进程, 遇到fork() 函数后就分叉成两个进程同时执行了. 而且这两个进程是互不影响

1.PNG

2.实验操作过程&两种情况的展示

  • 杀死父进程,子进程一并终止

查看进程:

查看进程

kill了父进程(电脑同时黑屏了...):

kill了父进程
  • 杀死父进程,子进程保留,同时转移至init托管——孤儿进程

创建父进程和子进程

#include <stdlib.h>
#include <stdio.h>

int main(){
    printf("Father is created\n\n");

    fork();//create a child process

    printf("Child is created\n\n");

    int i; scanf("%d",&i);   //prevent exiting
    return 0;
}
创建父进程和子进程

运行后系统的进程:

运行后系统的进程

杀掉父进程:

杀掉父进程
杀掉父进程

若希望改进使得父进程结束后,子进程自动结束:

prctl(PR_SET_PDEATHSIG,SIGHUP);

#include <signal.h>
#include <sys/prctl.h>
#include <stdlib.h>
#include <stdio.h>

int main(){
    printf("Father is created\n\n");

    fork();//create a child process

    prctl(PR_SET_PDEATHSIG,SIGHUP);

    printf("Child is created\n\n");

    int i; scanf("%d",&i);   //prevent exiting
    return 0;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Linux 进程管理与程序开发 进程是Linux事务管理的基本单元,所有的进程均拥有自己独立的处理环境和系统资源,...
    JamesPeng阅读 2,512评论 1 14
  • 又来到了一个老生常谈的问题,应用层软件开发的程序员要不要了解和深入学习操作系统呢? 今天就这个问题开始,来谈谈操...
    tangsl阅读 4,177评论 0 23
  • 诗写温西的雨 ☆田秀 题诗一首在温西的落叶 随伴温西的雨穿越深秋时空 那因风而飞的雨又是因为谁...
    兴安居士阅读 177评论 0 2
  • 数组是具有相同类型的一种数据的集合,按照维度可分为一维数组、二维数组和多维数组 数据类型 数组是引用类型(即是对象...
    w黄杨w阅读 565评论 0 0
  • 离开的号角已经吹响,收拾东西很快用了一个多小时,可是收拾心我却用了大半年都没有收拾完。邮寄东西很快半小时就办完了,...
    张乐天阅读 269评论 0 0