#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. 转:【HTTP】常见错误码说明

    一些常见的状态码为: 200 - 服务器成功返回网页404 - 请求的网页不存在503 - 服务不可用详细分解: 1xx(临时响应)表示临时响应并需要请求者继续执行操作的状态代码. 代码 说明100 ...

  2. IDEA编辑区光标样式修改

    转自:http://blog.csdn.net/aosica321/article/details/52787418 Intellj IDEA光标为insert状态,无法删除内容以前用得是社区版的ID ...

  3. VC6.0设置注释快捷键

    第一步:工具栏上右键选择Customize(定制),选择“Add-ins and Macro Files(附加项和宏文件)”页,把SAMPLE前面打上钩. 第二步:选择“Commands(命令)”页, ...

  4. Foundations of Machine Learning: The PAC Learning Framework(2)

    Foundations of Machine Learning: The PAC Learning Framework(2) (一)假设集有限在一致性下的学习界. 在上一篇文章中我们介绍了PAC-le ...

  5. Putty设置删除

    1. 开始→运行→cmd(进入字符界面) 2.切换目录到putty安装目录 3.执行以下清理命令 4.会跳出如下提示信息 点击[是(Y)]

  6. OGG_GoldenGate目标端库级别数据初始化(案例)

    2014-03-07 Created By BaoXinjian

  7. GDI+ 怎样将图片绘制成圆形的图片

    大概意思就是不生成新的图片,而是将图片转换为圆形图片. 实现代码例如以下: private Image CutEllipse(Image img, Rectangle rec, Size size) ...

  8. OpenGL核心之SSAO技术解说(一)

    笔者介绍:姜雪伟,IT公司技术合伙人.IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,国家专利发明人;已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D ...

  9. 黑马day18 鼠标事件&amp;图片变大

    有时候我们在淘宝网或者京东商城上浏览要购买的商品的时候当把鼠标移动到图图片上的时候会发现图片放大.然后鼠标移动,图片也会跟着移动,接下来我就使用jquery来实现这样的效果: 这是图片文件夹: < ...

  10. Qt中使用DOM解析XML文件或者字符串(实例)

    因为需要读取配置文件,我的配置文件采用xml:因此编写了使用qt读取xml文件内容的代码,xml文件如下: <?xml version="1.0" encoding=&quo ...