为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

什么是孤儿进程和僵尸进程.doc

2017-09-20 6页 doc 18KB 11阅读

用户头像

is_654168

暂无简介

举报
什么是孤儿进程和僵尸进程.doc什么是孤儿进程和僵尸进程.doc 什么是孤么程和尸么程儿僵 一、定么,什么是孤么程和尸么程儿僵 僵个没尸么程,一子么程在其父么程么有么用wait()或waitpid()的情下退出。么子么程就是尸么程。况个僵 孤么程,一父么程退出~而的一或多子么程么在行~那么那些子么程成么孤么程。孤么程被儿个它个个运将儿儿将init么程(么程么号1)所收么~由并 init么程么么完成么收集工作。它状 注, 僵将会儿会尸么程么致么源浪么~而孤么不。 子么程持么10秒么的尸么僵状(EXIT_ZOMBIE)—————————————————— #i...
什么是孤儿进程和僵尸进程.doc
什么是孤儿进程和僵尸进程.doc 什么是孤么程和尸么程儿僵 一、定么,什么是孤么程和尸么程儿僵 僵个没尸么程,一子么程在其父么程么有么用wait()或waitpid()的情下退出。么子么程就是尸么程。况个僵 孤么程,一父么程退出~而的一或多子么程么在行~那么那些子么程成么孤么程。孤么程被儿个它个个运将儿儿将init么程(么程么号1)所收么~由并 init么程么么完成么收集工作。它状 注, 僵将会儿会尸么程么致么源浪么~而孤么不。 子么程持么10秒么的尸么僵状(EXIT_ZOMBIE)—————————————————— #include #include #include #include main() { pid_t pid; pid = fork(); if(pid < 0) printf(“error occurred!\n”); else if(pid == 0) { printf(“Hi father! I’m a ZOMBIE\n”); exit(0); //(1) } else { sleep(10); wait(NULL); //(2) } } (1) 向父么程么送SIGCHILD信号 (2) 父么程么理SIGCHILD信号 么行exit()么根据其父么程的么定自己的么么状决状: 如果父么程已么退出(没有wait)~么么子么程成么孤么程么么么将会儿init么程 如果其父么程么有退出~也有没没wait()~那么么么程向父么程么送将SIGCHILD信~么入尸么等待父么程么其收尸。如果父么程一直有么号僵状没 行wait()~那么么子么程持么么于尸么。将会僵状 子么程成么孤么程将儿 —————————————————— #include #include #include #include main() { pid_t pid; pid = fork(); if(pid < 0) printf(“error occurred!\n”); else if(pid == 0) { sleep(6); printf(“I’m a orphan\n”); exit(0); } else { sleep(1); printf(“Children Bye!\n”); } } # ./a.out Children Bye! # I’m a orphan (回么后么入将会#) # 二、影,响 僵会很会响尸么程占用系么么源~如果多~么么重影服么器的性能 孤么程不占用系么么源儿会 么理: 只要父么程不等wait(sys/wait.h)子么程,子么程都成么孤魂野鬼将zombie(zombie),unix中默么父么程么是想看子么程死后的么状 if 父么程比子么程先退出 子么程被将init(id = 1)收么,最后的么果是zombie子么程么底再么,系么么源么放 else { 子么程的zombie将一直存在,系么么源占用… if 父么程dead 子么程被将init(id = 1)收么,最后的么果是zombie子么程么底再么,系么么源么放 else 么似的子么程zombie越越多来,系么就等死了!!! } 三、如何防止尸么程僵 首先明白如何么生尸么程,僵 1、子么程么束后向父么程么出SIGCHLD信~父么程默么忽略了号它 2、父么程有么用没wait()或waitpid()函等待子么程的么束数来 第一么方法: 捕捉SIGCHLD信号,并号数在信么理函里面么用wait函数 么么Richard Steven的Unix Network Programming代么 int main(int argc, char **argv) { … Signal(SIGCHLD, sig_chld); for(; } … } void sig_chld(int signo) { pid_t pid; int stat; while ( (pid = waitpid(-1, &stat, WNOHANG)) >; 0) printf(“child %d terminated\n”, pid); return; } 第二么方法,次两fork(),么么 在《Unix 么境高么么程》里么于么在个8.6么有非常楚的么明。清 么例 回么一下8 . 5么中有么死么程的么么。如果一么程要僵个fork一子么程~但不要求等待子么程么止~也不希望子么程么于死么直到父么程么止个它僵状~ 么么么一要求的么么是么用fork两次。程序8 – 5么么了么一点。在第二子么程中么用个sleep以保么在打印父么程ID么第一子么程已么止。在个fork之后~ 父、子么程都可么么么行我么无法么知一先么行。如果不使第二子么程睡眠~么——哪个会个 在fork之后~可能比其父么程先么行~于是打印的父么程它它ID将它是么建的父么程~而不是init么程;么程ID1,。#include #include #include “ourhdr.h” int main(void) { pid_t pid; if ( (pid = fork()) < 0) err_sys(“fork error”); else if (pid == 0) { if ( (pid = fork()) < 0) err_sys(“fork error”); else if (pid > 0) exit(0); sleep(2); printf(“second child, parent pid = %d\n”, getppid()); exit(0); } if (waitpid(pid, NULL, 0) != pid) err_sys(“waitpid error”); exit(0); } //avoid zombie process by forking twice
/
本文档为【什么是孤儿进程和僵尸进程&#46;doc】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索