亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
12下一頁
最近訪問板塊 發(fā)新帖
查看: 3937 | 回復(fù): 12
打印 上一主題 下一主題

請教一個關(guān)于僵尸進程的問題,謝謝! [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2011-12-07 13:10 |只看該作者 |倒序瀏覽
Unix/Linux里面講的僵尸進程是針對父進程的,還是針對子進程的?

論壇徽章:
0
2 [報告]
發(fā)表于 2011-12-07 13:21 |只看該作者
代碼A:

  1. #include <unistd.h>   
  2. #include <stdlib.h>   
  3. #include <stdio.h>   
  4. #include <sys/wait.h>   
  5.   
  6. const char cmd_init[]="ps -o pid,ppid,state,tty,command";  
  7.   
  8. int main(int argc,char **argv)  
  9. {  
  10.         pid_t   pid;
  11.         if((pid=fork()) < 0){
  12.                 exit(-1);
  13.         }
  14.         else if(pid==0){  /* 子進程exit */  
  15.                 exit(0);  
  16.         }
  17.         sleep(5);
  18.         system(cmd_init);
  19.         exit(0);  
  20. }
復(fù)制代碼
子進程先于父進程退出,此時在父進程sleep()這5秒的過程中,子進程就是一個僵尸進程;
上例中,父進程是正常退出,因此子進程也會退出;
如果在上例中,父進程是異常退出,此時子進程會保持zombie狀態(tài),并且由進程init托管。
上面這種說法正確么?

如果反過來,父進程先正常退出了,子進程繼續(xù)執(zhí)行;待子進程執(zhí)行完畢之后,子進程會是什么狀態(tài)?
如果父進程異常退出了,子進程在執(zhí)行完畢之后,又會是什么狀態(tài)?

論壇徽章:
0
3 [報告]
發(fā)表于 2011-12-07 13:37 |只看該作者
僵尸進程就是沒人管的孩子,最后只能有福利院接管

論壇徽章:
11
未羊
日期:2013-12-16 12:45:4615-16賽季CBA聯(lián)賽之青島
日期:2016-04-11 19:17:4715-16賽季CBA聯(lián)賽之廣夏
日期:2016-04-06 16:34:012015亞冠之卡爾希納薩夫
日期:2015-11-10 10:04:522015亞冠之大阪鋼巴
日期:2015-07-30 18:29:402015亞冠之城南
日期:2015-06-15 17:56:392015亞冠之卡爾希納薩夫
日期:2015-05-15 15:19:272015亞冠之山東魯能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16賽季CBA聯(lián)賽之八一
日期:2016-07-22 09:41:40
4 [報告]
發(fā)表于 2011-12-07 14:43 |只看該作者
代碼A:子進程先于父進程退出,此時在父進程sleep()這5秒的過程中,子進程就是一個僵尸進程;
上例中,父進程是 ...
Mr_Yao 發(fā)表于 2011-12-07 13:21


sleep 過程中確定時zombie嗎, 我沒做實驗, 但似乎和我看的代碼不想符合

論壇徽章:
0
5 [報告]
發(fā)表于 2011-12-07 14:50 |只看該作者
sleep 過程中確定時zombie嗎, 我沒做實驗, 但似乎和我看的代碼不想符合
zylthinking 發(fā)表于 2011-12-07 14:43



    確定。你是怎麼想的?

論壇徽章:
0
6 [報告]
發(fā)表于 2011-12-07 14:55 |只看該作者
如果反過來,父進程先正常退出了,子進程繼續(xù)執(zhí)行;待子進程執(zhí)行完畢之后,子進程會是什么狀態(tài)?
如果父進程異常退出了,子進程在執(zhí)行完畢之后,又會是什么狀態(tài)?Mr_Yao 發(fā)表于 2011-12-07 13:21


如果是父進程首先退出了,那麼內(nèi)核會自動查找屬於該進程的“活動”的子進程,并將他們託管給init進程。
這個和父進程是不是正常退出沒有關(guān)係的。

論壇徽章:
11
未羊
日期:2013-12-16 12:45:4615-16賽季CBA聯(lián)賽之青島
日期:2016-04-11 19:17:4715-16賽季CBA聯(lián)賽之廣夏
日期:2016-04-06 16:34:012015亞冠之卡爾希納薩夫
日期:2015-11-10 10:04:522015亞冠之大阪鋼巴
日期:2015-07-30 18:29:402015亞冠之城南
日期:2015-06-15 17:56:392015亞冠之卡爾希納薩夫
日期:2015-05-15 15:19:272015亞冠之山東魯能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16賽季CBA聯(lián)賽之八一
日期:2016-07-22 09:41:40
7 [報告]
發(fā)表于 2011-12-07 15:18 |只看該作者
本帖最后由 zylthinking 于 2011-12-07 15:27 編輯
確定。你是怎麼想的?
Mr_Yao 發(fā)表于 2011-12-07 14:50


所謂僵尸進程, 其實就是 SIGCHILD 沒有被父進程處理的進程, SIGCHILD 被處理只有在中斷, 異常, 及系統(tǒng)調(diào)用返回時;
首先異常不可能發(fā)生; 因為異常發(fā)生在用戶空間; 除非是頁面錯誤;
中斷可不太可能, 因為 sleep 時已經(jīng)是不在運行列表中了, 中斷借助的是當(dāng)前進程, 因此就算處理SIGCHILD也不會是 sleep 中的進程的SIGCHILD
剩下的系統(tǒng)調(diào)用就奇怪了, 因為這里正好命中, 那么在 sleep 返回后, 應(yīng)該已經(jīng)處理了 sigchild 的。
  1. 205ENTRY(ret_from_sys_call)
  2. 206#ifdef CONFIG_SMP
  3. 207        movl processor(%ebx),%eax
  4. 208        shll $CONFIG_X86_L1_CACHE_SHIFT,%eax
  5. 209        movl SYMBOL_NAME(irq_stat)(,%eax),%ecx          # softirq_active
  6. 210        testl SYMBOL_NAME(irq_stat)+4(,%eax),%ecx       # softirq_mask
  7. 211#else
  8. 212        movl SYMBOL_NAME(irq_stat),%ecx         # softirq_active
  9. 213        testl SYMBOL_NAME(irq_stat)+4,%ecx      # softirq_mask
  10. 214#endif
  11. 215        jne   handle_softirq
  12. 216        
  13. 217ret_with_reschedule:
  14. 218        cmpl $0,need_resched(%ebx)
  15. 219        jne reschedule
  16. 220        cmpl $0,sigpending(%ebx)   ----------------這里
  17. 221        jne signal_return
  18. 222restore_all:
  19. 223        RESTORE_ALL
  20. 224
  21. 225        ALIGN
  22. 226signal_return:
  23. 227        sti                             # we can get here from an interrupt handler
  24. 228        testl $(VM_MASK),EFLAGS(%esp)
  25. 229        movl %esp,%eax
  26. 230        jne v86_signal_return
  27. 231        xorl %edx,%edx
  28. 232        call SYMBOL_NAME(do_signal)  --------------這里
  29. 233        jmp restore_all
  30. 234
  31. 235        ALIGN
復(fù)制代碼
  1. 536

  2. 584int do_signal(struct pt_regs *regs, sigset_t *oldset)
  3. 585{
  4. 586        siginfo_t info;
  5. 587        struct k_sigaction *ka;
  6.   .......................................
  7. 643                ka = &current->sig->action[signr-1];
  8. 644                if (ka->sa.sa_handler == SIG_IGN) {
  9. 645                        if (signr != SIGCHLD)
  10. 646                                continue;
  11. 647                        /* Check for SIGCHLD: it's special.  */
  12. 648                        while (sys_wait4(-1, NULL, WNOHANG, NULL) > 0)  ------------------這里
  13. 649                                /* nothing */;
  14. 650                        continue;
  15. 651                }
  16. 652
  17. ...........................................
  18. 715        return 0;
  19. 716}
  20. 717
復(fù)制代碼
那為什么在其后的  ps 中, 會照樣找到一個 zombie 的子進程呢

論壇徽章:
3
巳蛇
日期:2013-10-03 10:41:48申猴
日期:2014-07-29 16:12:04天蝎座
日期:2014-08-21 09:24:52
8 [報告]
發(fā)表于 2011-12-07 16:42 |只看該作者
如果反過來,父進程先正常退出了,子進程繼續(xù)執(zhí)行;待子進程執(zhí)行完畢之后,子進程會是什么狀態(tài)?
============

父進程正常退出后,如果子進程還在執(zhí)行,它就由init領(lǐng)養(yǎng)了。
子進程執(zhí)行完畢之后,它的資源由init回收。

論壇徽章:
3
巳蛇
日期:2013-10-03 10:41:48申猴
日期:2014-07-29 16:12:04天蝎座
日期:2014-08-21 09:24:52
9 [報告]
發(fā)表于 2011-12-07 16:44 |只看該作者
僵尸進程是因為,父進程一直存在,產(chǎn)生子進程,當(dāng)子進程退出時,父進程沒有回收他退出子進程的資源。

如果父進程直接就退出了那就不會有僵尸進程了

論壇徽章:
0
10 [報告]
發(fā)表于 2011-12-08 09:00 |只看該作者
僵尸進程是因為,父進程一直存在,產(chǎn)生子進程,當(dāng)子進程退出時,父進程沒有回收他退出子進程的資源。

如 ...
pandaiam 發(fā)表于 2011-12-07 16:44



    恩,說到了點子上了。
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP