#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. 转载:substr() mb_substr() mb_subcut区别与联系

    substr() $rest = substr("abcdef", 1); //bcdef $rest = substr("abcdef", 1,5); //b ...

  2. Git恢复之前版本的两种方法reset、revert(图文详解)

    一.问题描述在利用github实现多人合作程序开发的过程中,我们有时会出现错误提交的情况,此时我们希望能撤销提交操作,让程序回到提交前的样子,本文总结了两种解决方法:回退(reset).反做(reve ...

  3. ASP.NET#使用母版时,如果要使用js中的getElementById()方法取得某个内容页的元素时要注意的问题

    当使用母版,要使用js中的getElementById()方法取得某个内容页的元素时,所选取的id并不是母版中内容页的id,而是在设计内容页时设定的id例子:母版页: ...... <head ...

  4. 概率校准Probability Calibration

    在分类问题中,我们有时不仅仅需要给测试样本打上类别标签,也需要给出一个"置信度"来表示该样本属于此类别的可能性. 然而,有的分类器只能直接打上类别标签没法给出置信度.概率校准就是用 ...

  5. 入门Nginx

    一.正向代理和反向代理 正向代理举例:翻越万里长城去游览墙外的景色 反向代理举例:负载均衡 正向代理和反向代理涉及三个主体: 请求方 代理 被请求方 正向代理中,代理跟请求方是一家子,请求方说要啥,代 ...

  6. 使用winsound模块播放声音

    import winsound import math s = """3345 1233345 234 431 434 -612 12334567 +1+1345 234 ...

  7. 【LeetCode】40. Combination Sum II (2 solutions)

    Combination Sum II Given a collection of candidate numbers (C) and a target number (T), find all uni ...

  8. RHEL7 -- 修改主机名

    RHEL7中,有三种定义的主机名: a.静态的(static):“静态”主机名也称为内核主机名,是系统在启动时从/etc/hostname自动初始化的主机名 b.瞬态的(transient):“瞬态” ...

  9. Linux内核(13) - 子系统的初始化之以PCI子系统为例

    由Kconfig这张地图的分布来看,PCI这块儿的代码应该分布在两个地方,drivers/pci和arch/i386/pci,两岸三地都属于一个中国,不管是drivers/pci那儿的,还是arch/ ...

  10. STM32 SPI接口的NSS引脚

    SPI_NSS 设置 NSS 信号由硬件( NSS 管脚)还是软件控制,这里我们一般通过软件控制 NSS ,而不是硬件自动控制,所以选择 SPI_NSS_Soft 选择了软件NSS之后,引脚NSS就可 ...