#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include<stdlib.h>
#include<signal.h>
int main(int argc , char **argv)
{
int id;
 id=fork();
if(id<)
{
printf("fork error\n");
}
else if(id==)
{
printf("I'm in child process%d parent process%d\n",getpid(),getppid());
sleep();
exit();
}
else if(id>)
{
printf("I'm in parent process%d\n",getpid());
} return ;
} [root@linux Desktop]# gcc 僵尸进程.c
[root@linux Desktop]# ./a.out
I'm in parent process4308
[root@linux Desktop]# I'm in child process4309 parent process [root@linux Desktop]#
从上面的输出结果可以看出孩子进程4309的父进程是1号进程也就是init进程,这是因为子进程的父进程死亡后
子进程被init进程接管!所以说输出他的父进程号为1; [root@linux Desktop]# ps --ppid
PID TTY TIME CMD
? :: udevd
? :: vmware-vmblock-
? :: vmtoolsd
? :: portreserve
? :: rsyslogd
? :: dbus-daemon
? :: NetworkManager
? :: modem-manager
? :: avahi-daemon
? :: wpa_supplicant
? :: cupsd
? :: acpid
? :: hald
? :: sshd
? :: tpvmlp
? :: mysqld_safe
? :: abrtd
? :: abrt-dump-oops
? :: crond
? :: atd
? :: rhsmcertd
? :: gdm-binary
tty2 :: mingetty
tty3 :: mingetty
tty4 :: mingetty
tty5 :: mingetty
tty6 :: mingetty
? :: console-kit-dae
? :: dbus-launch
? :: devkit-power-da
? :: auditd
? :: polkitd
? :: rtkit-daemon
? :: gnome-keyring-d
? :: dbus-launch
? :: dbus-daemon
? :: gconfd-
? :: gnome-settings-
? :: seahorse-daemon
? :: gvfsd
? :: gvfs-fuse-daemo
? :: bonobo-activati
? :: wnck-applet
? :: trashapplet
? :: vmtoolsd
? :: gvfs-gdu-volume
? :: udisks-daemon
? :: pulseaudio
? :: gvfs-gphoto2-vo
? :: gvfs-afc-volume
? :: clock-applet
? :: gdm-user-switch
? :: gnote
? :: notification-ar
? :: restorecond
? :: gvfsd-trash
? :: gnome-screensav
? :: gvfsd-burn
? :: gvfsd-metadata
? :: notification-da
? :: gnome-terminal
? :: gedit
4309 pts/0 00:00:00 a.out 注意下面这幅图中这句没有输出 [root@linux Desktop]# ps --ppid
PID TTY TIME CMD
? :: udevd
? :: vmware-vmblock-
? :: vmtoolsd
? :: portreserve
? :: rsyslogd
? :: dbus-daemon
? :: NetworkManager
? :: modem-manager
? :: avahi-daemon
? :: wpa_supplicant
? :: cupsd
? :: acpid
? :: hald
? :: sshd
? :: tpvmlp
? :: mysqld_safe
? :: abrtd
? :: abrt-dump-oops
? :: crond
? :: atd
? :: rhsmcertd
? :: gdm-binary
tty2 :: mingetty
tty3 :: mingetty
tty4 :: mingetty
tty5 :: mingetty
tty6 :: mingetty
? :: console-kit-dae
? :: dbus-launch
? :: devkit-power-da
? :: auditd
? :: polkitd
? :: rtkit-daemon
? :: gnome-keyring-d
? :: dbus-launch
? :: dbus-daemon
? :: gconfd-
? :: gnome-settings-
? :: seahorse-daemon
? :: gvfsd
? :: gvfs-fuse-daemo
? :: bonobo-activati
? :: wnck-applet
? :: trashapplet
? :: vmtoolsd
? :: gvfs-gdu-volume
? :: udisks-daemon
? :: pulseaudio
? :: gvfs-gphoto2-vo
? :: gvfs-afc-volume
? :: clock-applet
? :: gdm-user-switch
? :: gnote
? :: notification-ar
? :: restorecond
? :: gvfsd-trash
? :: gnome-screensav
? :: gvfsd-burn
? :: gvfsd-metadata
? :: notification-da
? :: gnome-terminal
? :: gedit
[root@linux Desktop]#
在我测试这两幅图的时候,第一幅图输出后,要等大概两分多钟,也就是大概子进程执行完后,
init进程调用wait会清理掉刚才接收的子进程( )。
子进程4309
//如果将signal(SIGCHLD, SIG_IGN);这行代码加上放在main函数的第一行,应该说会出现一种情况当父进程退出时,父进程的父进程不会理会他,而直接让init进程接管他,但是用ps --ppid 1输出时,没有发现父进程。!只有子进程号!
 

init进程接管孤儿进程的验证的更多相关文章

  1. 并发编程(二)--利用Process类开启进程、僵尸进程、孤儿进程、守护进程、互斥锁、队列与管道

    一.multiprocessing模块 1.multiprocessing模块用来开启子进程,并在子进程中执行我们定制的任务(比如函数),该模块与多线程模块threading的编程接口类似. 2.mu ...

  2. 并发编程(二)——利用Process类开启进程、僵尸进程、孤儿进程、守护进程、互斥锁、队列与管道

    Process类与开启进程.守护进程.互斥锁 一.multiprocessing模块 1.multiprocessing模块用来开启子进程,并在子进程中执行我们定制的任务(比如函数),该模块与多线程模 ...

  3. 进程——wait与waitpid、僵尸进程与孤儿进程

    僵尸进程:子进程终止了,但是父进程没有回收子进程的资源PCB.使其成为僵尸进程 孤儿进程:父进程先与子进程结束了,使得子进程失去了父进程,这个时候子进程会被1号进程init进程领养,成为孤儿进程 为了 ...

  4. Linux-进程描述(3)之进程状态僵尸进程与孤儿进程

    进程状态 进程状态反映进程执行过程的变化.这些状态随着进程的执行和外界条件的变化而转换.为了弄明正正在运行的进程是什么意思,我们需要知道进程的不同状态.一个进程可以有多个状态(在Linux内核中,进程 ...

  5. 多进程wait、僵尸进程、孤儿进程、prctl

    1.概念 1.孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程.孤儿进程将被init进程(进程号为1)所收养,从而保证每个进程都会有一个父进程.而Init进程会自 ...

  6. 【Linux 进程】孤儿进程、僵尸进程和守护进程

    1.孤儿进程: 孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程.孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作.孤儿进程是 ...

  7. linux的僵尸进程和孤儿进程

    1 僵尸进程: 子进程已经退出勒 但是还没有回收资源的进程为僵尸进程 代码验证 #include <stdio.h> #include <stdlib.h> #include ...

  8. Python进阶----进程间数据隔离, join阻塞等待, 进程属性, 僵尸进程和孤儿进程, 守护进程

    Python进阶----进程间数据隔离, join阻塞等待, 进程属性, 僵尸进程和孤儿进程, 守护进程 一丶获取进程以及父进程的pid 含义:    进程在内存中开启多个,操作系统如何区分这些进程, ...

  9. [并发编程 - socketserver模块实现并发、[进程查看父子进程pid、僵尸进程、孤儿进程、守护进程、互斥锁、队列、生产者消费者模型]

    [并发编程 - socketserver模块实现并发.[进程查看父子进程pid.僵尸进程.孤儿进程.守护进程.互斥锁.队列.生产者消费者模型] socketserver模块实现并发 基于tcp的套接字 ...

随机推荐

  1. iOS获取本地沙盒视频封面图片(含swift实现)

    最近做了个小应用,有涉及到本地视频播放及列表显示. 其中一个知识点就是获取本地存储视频,用来界面中的封面显示. 记录如下: //videoURL:本地视频路径 time:用来控制视频播放的时间点图片截 ...

  2. python中如何对list之间求交集,并集和差集

    最近遇到一个从list a里面去除list b的元素的问题,由于a很大,b也不小.所以遇到点困难,现在mark一下. 先说最简单的方法: a = [1, 2, 3, 4, 5, 6, 7, 8, 9, ...

  3. 马老师 Linux基础入门

    总线(Bus)是计算机各种功能部件之间传送信息的公共通信干线,它是由导线组成的传输线束, 按照计算机所传输的信息种类,计算机的总线可以划分为数据总线.地址总线和控制总线,分别用来传输数据.数据地址和控 ...

  4. Eclipse折叠代码 coffee bytes code folding

    提供一个插件下载地址,博客园的: http://files.cnblogs.com/wucg/com.cb.eclipse.folding_1.0.6.jar.zip  将下载的zip文件解压出来的j ...

  5. Apache Storm使用

    Apache Storm 是 Apache 基金会的开源的分布式实时计算系统.与 Hadoop 的批处理相类似,Storm 可以对大量的数据流进行可靠的实时处理,这一过程也称为“流式处理”,是分布式大 ...

  6. NRF24L01使用外部中断读取数据的问题

    NRF24L01读取数据不能使用中断的方式,原因如下: 首先NRF24L01中断触发时,IRQ引脚会一直保持低电平直到状态寄存器中的中断标志被重新清零. stm32的外部中断触发方式只有上升沿或者下降 ...

  7. mysql两列合成一列

    update manage set mark = concat(mark,remark) select concat(mark,remark) as pp from manage

  8. linux安装php环境,yum安装php环境

    用yum来管理安装Apache PHP Mysql的基本安装.1. 安装Apahce, PHP, Mysql, 以及php连接mysql库组件.yum -y install httpd php mys ...

  9. Spring里的aop实现方式和源码分析

    使用"横切"技术,AOP把软件系统分为两个部分:核心关注点和横切关注点.业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点.横切关注点的一个特点是,他们经常发生在核心关 ...

  10. 深入理解Docker Volume(一)

    想要了解Docker Volume,首先我们需要知道Docker的文件系统是如何工作的.Docker镜像是由多个文件系统(只读层)叠加而成.当我们启动一个容器的时候,Docker会加载镜像层并在其上添 ...