美文网首页程序媛程序员
考察父进程被终止后,子进程的不同状态

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

作者: lisaljy | 来源:发表于2017-04-04 09:54 被阅读150次

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

  • 子进程一并被终止;
  • 子进程成为孤儿进程,被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;
}

相关文章

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

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

  • 僵尸进程处理方案

    僵尸进程介绍 Z(zombie)-僵尸进程(子进程终止,父进程没有wait子进程) 僵尸进程产生原因 僵尸进程是当...

  • 关于如何避免僵尸进程

    1、父进程调用wait()或waitpid()函数 2、将父进程杀死或者父进程终止了,让僵尸子进程变成孤儿进程,将...

  • 示例说明僵尸进程的危害及解决方法

    简述 首先简要说明下僵尸进程和孤儿进程的概念(前提都是父进程调用fork产生子进程) 僵尸进程:子进程终止,父进程...

  • 进程

    孤儿进程:父进程退出的子进程。会被init进程(进程号为1)收养,并负责其状态收集。不会产生危害。僵尸进程:退出后...

  • fork 进程测试 copy-on-write

    父进程 fork 子进程后,子进程通过 copy-on-write 模式获得父进程内存,也就是子进程共用了大部分父...

  • 孤儿进程、僵尸进程与进程回收

    孤儿进程与僵尸进程 孤儿进程:父亲死了,子进程被init进程领养僵尸进程:子进程死了,父进程没有回收子进程的资源(...

  • node.js略知一二之child_process

    子进程与父进程分离 正常情况下,父进程结束后,子进程都会被终结。如果我们想要子进程和父进程进行分离,可以使用spa...

  • Linux回收子进程

    孤儿进程 孤儿进程: 父进程先于子进程结束,则子进程成为孤儿进程,子进程的父进程成为init进程,称为init进程...

  • 11.进程操作

    1.创建子进程 运行结果: 2.进程终止 3.遗言函数,注册多次,运行多次。注册顺序和调用顺序相反。子进程继承父进...

网友评论

    本文标题:考察父进程被终止后,子进程的不同状态

    本文链接:https://www.haomeiwen.com/subject/hceaottx.html