Zombie process

¡iͦW¡j¦º¤`³B²zµ{§Ç

¡i»¡©ú¡j¨C­Ó UNIX ªº³B²zµ{§Ç¦b®Ö¤ßµ{¦¡ªº³B²zµ{§Çªíùس£¾Ö¦³¤@­Ó¶i¤JÂI¡]entry¡^¡A·í®Ö¤ßµ{¦¡°õ¦æ¸Ó³B²zµ{§Ç®É·|¨Ï¥Î¨ìªº¤@¤Á¸ê°T³£Àx¦s¦b³o­Ó¶i¤JÂI¤º¡F¨Æ¹ê¤W·í±z¥Î ps -ef «ü¥O¥hÅã¥Ü²Î¤¤©Ò¦³³B²zµ{§Çªº¸ê®Æ®É¡Aps ´N¬O±q³B²zµ{§Çªí¤¤§â¬ÛÃö¸ê®Æ§ä¥X¨Ó¡C

¦b§Ú­Ì¥H fork() ¨t²Î©I¥s«Ø¥ß¤@­Ó·sªº³B²zµ{§Ç«á¡A®Ö¤ßµ{¦¡·|¦b³B²zµ{§Çªíùاä¤@­Ó¶i¤JÂIµ¹³o­Ó·s³B²zµ{§Ç¡AµM«á±N¤@¨Ç¸ê°TÀx¦s¦b³o­Ó¶i¤JÂI©Ò¹ïÀ³ªº³B²zµ{§Çªí¤º¡C³o¨Ç¸ê°TùØ­±¦³¤@¶µ¬O¤÷³B²zµ{§ÇªºÃѧO½X¡C·í³o­Ó³B²zµ{§Ç¨«§¹¤F¥¦ªº¥Í©R¶g´Á«á¡A¥¦·|°õ¦æ exit() ¨t²Î©I¥s¡A¦¹¨è­ì¥»³B²zµ{§Çªíªº¸ê®Æ·|³Q¸Ó³B²zµ{§ÇªºÄÀ¥X½X¡]exit code¡^¡B°õ¦æ®É©Ò¥Îªº CPU ®É¶¡µ¥¸ê®Æ©Ò¨ú¥N¡A³o¨Ç¸ê®Æ·|³Q¤@ª½«O¯d¨ì¨t²Î±N¥¦¶Ç»¼µ¹¥¦ªº¤÷³B²zµ{§Ç¬°¤î¡C¥Ñ¦¹¥iª¾ zombie¡]defunct¡^³B²zµ{§Çªº¥X²{¬O¦b¤l³B²zµ{§Ç²×¤î«á¡A¦ý¬O¤÷³B²zµ{§Ç¥¼Åª¨ú³o¨Ç¸ê®Æ«e¡C§Q¥Î³o­Ó­ì«h§Ú­Ì¥i¥H¥Î¤U­±ªºµ{¦¡«Ø¥ß¤@­Ó zombie ³B²zµ{§Ç¡G

1[0] #include <stdio.h>

2[0] #include <sys/types.h>

3[0]

4[0] main()

5[1] {

6[1] pid_t pid;

7[1] switch(pid=fork())

8[2] {

9[2] case -1 :

10[2] perror("fork");

11[2] exit(1);

12[2] case(0) :

13[2] printf("child pid=%d\n",getpid());

14[2] exit(0);

15[2] default :

16[2] sleep(30);

17[1] }

18[1] printf("parent pid=%d\n",getpid());

19[1] exit(0);

20[0] }

ŪªÌ¥i¥H±N¦¹³B²zµ{§Ç¥H¹õ«áªº¤è¦¡¨Ó°õ¦æ¡A³o®É±z±N¥i¥Hµo²{¦³ zombie ªº²£¥Í¡C

¡i°Ñ¦Ò¡jdefunct¡AProcess