init进程接管孤儿进程的验证

 
#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<0)
  {
  printf("fork error\n");
  }
 else if(id==0)
  {
   printf("I'm in child process%d parent process%d\n",getpid(),getppid());
   sleep(120);
   exit(0);
   }
 else if(id>0)
   {
   printf("I'm in parent process%d\n",getpid());
   }
   
  return 0;
}

[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 1

[root@linux Desktop]# 
从上面的输出结果可以看出孩子进程4309的父进程是1号进程也就是init进程,这是因为子进程的父进程死亡后
子进程被init进程接管!所以说输出他的父进程号为1;

[root@linux Desktop]# ps --ppid 1
  PID TTY          TIME CMD
  494 ?        00:00:00 udevd
 1474 ?        00:00:00 vmware-vmblock-
 1494 ?        00:00:20 vmtoolsd
 1640 ?        00:00:00 portreserve
 1647 ?        00:00:00 rsyslogd
 1700 ?        00:00:02 dbus-daemon
 1711 ?        00:00:00 NetworkManager
 1717 ?        00:00:00 modem-manager
 1723 ?        00:00:00 avahi-daemon
 1733 ?        00:00:00 wpa_supplicant
 1737 ?        00:00:00 cupsd
 1762 ?        00:00:00 acpid
 1771 ?        00:00:00 hald
 1840 ?        00:00:00 sshd
 1878 ?        00:00:00 tpvmlp
 1951 ?        00:00:00 mysqld_safe
 2113 ?        00:00:00 abrtd
 2121 ?        00:00:00 abrt-dump-oops
 2129 ?        00:00:01 crond
 2140 ?        00:00:00 atd
 2155 ?        00:00:00 rhsmcertd
 2171 ?        00:00:00 gdm-binary
 2178 tty2     00:00:00 mingetty
 2180 tty3     00:00:00 mingetty
 2182 tty4     00:00:00 mingetty
 2190 tty5     00:00:00 mingetty
 2192 tty6     00:00:00 mingetty
 2229 ?        00:00:00 console-kit-dae
 2299 ?        00:00:00 dbus-launch
 2315 ?        00:00:00 devkit-power-da
 2323 ?        00:00:00 auditd
 2383 ?        00:00:00 polkitd
 2389 ?        00:00:00 rtkit-daemon
 2414 ?        00:00:00 gnome-keyring-d
 2432 ?        00:00:00 dbus-launch
 2433 ?        00:00:00 dbus-daemon
 2447 ?        00:00:01 gconfd-2
 2452 ?        00:00:20 gnome-settings-
 2457 ?        00:00:00 seahorse-daemon
 2462 ?        00:00:00 gvfsd
 2468 ?        00:00:00 gvfs-fuse-daemo
 2487 ?        00:00:00 bonobo-activati
 2495 ?        00:00:13 wnck-applet
 2496 ?        00:00:00 trashapplet
 2499 ?        00:00:39 vmtoolsd
 2503 ?        00:00:00 gvfs-gdu-volume
 2510 ?        00:00:00 udisks-daemon
 2516 ?        00:00:03 pulseaudio
 2541 ?        00:00:00 gvfs-gphoto2-vo
 2543 ?        00:00:01 gvfs-afc-volume
 2555 ?        00:00:00 clock-applet
 2556 ?        00:00:00 gdm-user-switch
 2557 ?        00:00:00 gnote
 2558 ?        00:00:00 notification-ar
 2563 ?        00:00:00 restorecond
 2566 ?        00:00:00 gvfsd-trash
 2573 ?        00:00:12 gnome-screensav
 2665 ?        00:00:00 gvfsd-burn
 2677 ?        00:00:00 gvfsd-metadata
 2706 ?        00:00:08 notification-da
 2725 ?        00:00:44 gnome-terminal
 2783 ?        00:00:44 gedit
 4309 pts/0    00:00:00 a.out   注意下面这幅图中这句没有输出


[root@linux Desktop]# ps --ppid 1
  PID TTY          TIME CMD
  494 ?        00:00:00 udevd
 1474 ?        00:00:00 vmware-vmblock-
 1494 ?        00:00:20 vmtoolsd
 1640 ?        00:00:00 portreserve
 1647 ?        00:00:00 rsyslogd
 1700 ?        00:00:02 dbus-daemon
 1711 ?        00:00:00 NetworkManager
 1717 ?        00:00:00 modem-manager
 1723 ?        00:00:00 avahi-daemon
 1733 ?        00:00:00 wpa_supplicant
 1737 ?        00:00:00 cupsd
 1762 ?        00:00:00 acpid
 1771 ?        00:00:00 hald
 1840 ?        00:00:00 sshd
 1878 ?        00:00:00 tpvmlp
 1951 ?        00:00:00 mysqld_safe
 2113 ?        00:00:00 abrtd
 2121 ?        00:00:00 abrt-dump-oops
 2129 ?        00:00:01 crond
 2140 ?        00:00:00 atd
 2155 ?        00:00:00 rhsmcertd
 2171 ?        00:00:00 gdm-binary
 2178 tty2     00:00:00 mingetty
 2180 tty3     00:00:00 mingetty
 2182 tty4     00:00:00 mingetty
 2190 tty5     00:00:00 mingetty
 2192 tty6     00:00:00 mingetty
 2229 ?        00:00:00 console-kit-dae
 2299 ?        00:00:00 dbus-launch
 2315 ?        00:00:00 devkit-power-da
 2323 ?        00:00:00 auditd
 2383 ?        00:00:00 polkitd
 2389 ?        00:00:00 rtkit-daemon
 2414 ?        00:00:00 gnome-keyring-d
 2432 ?        00:00:00 dbus-launch
 2433 ?        00:00:00 dbus-daemon
 2447 ?        00:00:01 gconfd-2
 2452 ?        00:00:20 gnome-settings-
 2457 ?        00:00:00 seahorse-daemon
 2462 ?        00:00:00 gvfsd
 2468 ?        00:00:00 gvfs-fuse-daemo
 2487 ?        00:00:00 bonobo-activati
 2495 ?        00:00:13 wnck-applet
 2496 ?        00:00:00 trashapplet
 2499 ?        00:00:39 vmtoolsd
 2503 ?        00:00:00 gvfs-gdu-volume
 2510 ?        00:00:00 udisks-daemon
 2516 ?        00:00:03 pulseaudio
 2541 ?        00:00:00 gvfs-gphoto2-vo
 2543 ?        00:00:01 gvfs-afc-volume
 2555 ?        00:00:00 clock-applet
 2556 ?        00:00:00 gdm-user-switch
 2557 ?        00:00:00 gnote
 2558 ?        00:00:00 notification-ar
 2563 ?        00:00:00 restorecond
 2566 ?        00:00:00 gvfsd-trash
 2573 ?        00:00:12 gnome-screensav
 2665 ?        00:00:00 gvfsd-burn
 2677 ?        00:00:00 gvfsd-metadata
 2706 ?        00:00:08 notification-da
 2725 ?        00:00:44 gnome-terminal
 2783 ?        00:00:44 gedit
[root@linux Desktop]# 
在我测试这两幅图的时候,第一幅图输出后,要等大概两分多钟,也就是大概子进程执行完后,
init进程调用wait会清理掉刚才接收的子进程(4309 )。
子进程4309 

//如果将signal(SIGCHLD, SIG_IGN);这行代码加上放在main函数的第一行,应该说会出现一种情况当父进程退出时,父进程的父进程不会理会他,而直接让init进程接管他,但是用ps --ppid 1输出时,没有发现父进程。!只有子进程号!
 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值