【Linux 进程】孤儿进程、僵尸进程和守护进程
1、孤儿进程:
孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。孤儿进程是没有父进程的进程,孤儿进程这个重任就落到了init进程身上,init进程就好像是一个民政局,专门负责处理孤儿进程的善后工作。每当出现一个孤儿进程的时候,内核就把孤儿进程的父进程设置为init,而init进程会循环地wait()它的已经退出的子进程。这样,当一个孤儿进程凄凉地结束了其生命周期的时候,init进程就会代表党和政府出面处理它的一切善后工作。因此孤儿进程并不会有什么危害。
模拟孤儿进程的产生:
- #include <sys/types.h>
- #include <unistd.h>
- #include <stdlib.h>
- #include <stdio.h>
- #include <string.h>
- #include <signal.h>
- #include <errno.h>
- int main(void)
- {
- pid_t pid ;
- signal(SIGCHLD,SIG_IGN);
- printf("before fork pid:%d\n",getpid());
- int abc = ;
- pid = fork();
- if(pid == -)
- {
- perror("tile");
- return -;
- }
- if(pid > ) //父进程先退出
- {
- abc++;
- printf("parent:pid:%d \n",getpid());
- printf("abc:%d \n",abc);
- sleep();
- }
- else if(pid == ){ //子进程后退出,被托付给init进程
- abc++;
- printf("child:%d,parent: %d\n",getpid(),getppid());
- printf("abc:%d",abc);
- sleep();
- }
- printf("fork after...\n");
- }
输出:
before fork pid:27709
parent:pid:27709
abc:11
child:27710,parent: 27709
fork after...
然后我们使用命令:ps -ef查看,PPID 为1的这个进程为上述程序产生的孤儿进程。
2、僵尸进程:
- #include <sys/types.h>
- #include <unistd.h>
- #include <stdlib.h>
- #include <stdio.h>
- #include <string.h>
- #include <signal.h>
- #include <errno.h>
- int main(void)
- {
- pid_t pid ;
- //signal(SIGCHLD,SIG_IGN);
- printf("before fork pid:%d\n",getpid());
- int abc = ;
- pid = fork();
- if(pid == -)
- {
- perror("tile");
- return -;
- }
- if(pid > )
- {
- abc++;
- printf("parent:pid:%d \n",getpid());
- printf("abc:%d \n",abc);
- sleep();
- }
- else if(pid == ){
- abc++;
- printf("child:%d,parent: %d\n",getpid(),getppid());
- printf("abc:%d",abc);
- exit();
- }
- printf("fork after...\n");
在父进程休眠的20秒内,产生了僵尸进程,此时可以打开另一个终端,命令ps -ef查看到:
admin 29696 29695 0 20:04 pts/1 00:00:00 [zombie] <defunct>
即我们模拟出来的僵尸进程。
避免僵尸进程的方式:
【Linux 进程】孤儿进程、僵尸进程和守护进程的更多相关文章
- linux分享六:nohup与&,守护进程
contab每秒执行脚本,然后将把标准错误重定向到标准输出(2>&1)以追加的方式写入log_cronjob.txt.补充:试想2>1代表什么,2与>结合代表错误重定向,而1 ...
- Linux Rsync备份服务介绍及部署守护进程模式
rsync介绍 rsync是一款开源的.快速的.多功能的.可实现全量及增量的本地或远程数据同步备份工具 在常驻模式(daemon mode)下,rsync默认监听TCP端口873,以原生rsync传输 ...
- (并发编程)进程IPC,生产者消费者模型,守护进程补充
一.IPC(进程间通信)机制进程之间通信必须找到一种介质,该介质必须满足1.是所有进程共享的2.必须是内存空间附加:帮我们自动处理好锁的问题 a.from multiprocessing import ...
- linux下为.net core应用创建守护进程
1.Supervisor 安装 yum install python-setuptools easy_install supervisor 2.配置 Supervisor mkdir /etc/sup ...
- [Linux]使用PHP编写Gearman的Worker守护进程
在我之前的文章中,介绍过Gearman的使用.在我的项目中,我使用了PHP来编写一直运行的Worker.如果按照Gearman官方推荐的例子,只是简单的一个循环来等待任务,会有一些问题,包括:1.当代 ...
- 二十三、Linux 进程与信号---进程链和进程扇、守护进程和孤儿进程以及僵尸进程
23.1 进程链和进程扇 23.1.1 概念 进程链:一个父进程构建出一个子进程,子进程再构建出子子进程,子子进程构建出子子子进程.... 这种就为进程链 进程扇:一个父进程构建出多个子进程,子进程都 ...
- Linux进程学习(孤儿进程和守护进程)
孤儿进程和守护进程 通过前面的学习我们了解了如何通过fork()函数和vfork()函数来创建一个进程.现在 我们继续深入来学习两个特殊的进程:孤儿进程和守护进程 一.孤儿进程 1.什么是 孤儿进程如 ...
- Linux进程学习 - 孤儿进程和守护进程
孤儿进程和守护进程 通过前面的学习我们了解了如何通过fork()函数和vfork()函数来创建一个进程.现在 我们继续深入来学习两个特殊的进程:孤儿进程和守护进程 一.孤儿进程 1.什么是 孤儿进程如 ...
- 并发编程(二)--利用Process类开启进程、僵尸进程、孤儿进程、守护进程、互斥锁、队列与管道
一.multiprocessing模块 1.multiprocessing模块用来开启子进程,并在子进程中执行我们定制的任务(比如函数),该模块与多线程模块threading的编程接口类似. 2.mu ...
- Python进阶----进程间数据隔离, join阻塞等待, 进程属性, 僵尸进程和孤儿进程, 守护进程
Python进阶----进程间数据隔离, join阻塞等待, 进程属性, 僵尸进程和孤儿进程, 守护进程 一丶获取进程以及父进程的pid 含义: 进程在内存中开启多个,操作系统如何区分这些进程, ...
随机推荐
- RN Component生命周期函数
https://www.race604.com/react-native-component-lifecycle/ 第一次加载时: getInitialProps getInitialState co ...
- git-搭建企业git服务器
1.安装 yum install git 2.增加用户 useradd git -d /home/git -g git 3.查看公钥鉴权文件是否存在 cat /home/git/.ssh/autho ...
- kafka无法消费数据
遇到一个问题,使用Python kafka客户端和kafka命令行都无法消费数据,但是在kafka命令行后面添加--partition 0后就可以消费数据. bin/kafka-console-con ...
- img标签在div里上下居中
方法一:图片尺寸未知,IE8-不支持 CSS部分: <style> .content{ width:500px; height:500px; border:1px solid black; ...
- How to Pronounce TH after N or Z
How to Pronounce TH after N or Z Share Tweet Share Tagged With: Linking Consonant to Consonant The T ...
- How to Pronounce the Letters NG – No Hard G
How to Pronounce the Letters NG – No Hard G Share Tweet Share Most of the time when you see the lett ...
- js 改变颜色值
/** * 获取颜色值 */ const color2RGB = (color) => { if (typeof color !== 'string' || (color.length !== ...
- 尚未解决的webpack问题
91% additional asset processing 打包过程中,在91%的时候会出现卡顿几秒 在js,css使用chunkhash替代hash 字体和图片:没有此chunkhash,只有h ...
- JAVAWEB 一一 userweb2(升级,servlet版,jstl和el)
创建数据库和表 首先,创建一个web项目 然后引入jar包(jstl.jar和standard.jar是jstl和el包,在jsp页面中需要手动加 <%@ taglib uri="ht ...
- Unity资源Assetbundle
转 Unity资源打包之Assetbundle 本文原创版权归 csdn janeky 所有,转载请详细注明原创作者及出处,以示尊重! 作者:janeky 原文:http://blog.csdn.n ...