Linux Guard Service - 守护进程分裂
分裂守护进程
由于fork()后第一行仍然在循环中,使用fork()返回值鉴别当前进程的性质
int i = 0;
for (i = 0; i < 10; i++) {
// sleep(1);
printf("new fork() process pid = %d \n", pid);
pid = fork();
if (pid == 0) break;
}
pid==0时说明该进程为子进程不能再进行循环(否则将不断创造进程直到子进程上限)
子进程和父进程的关系
1. 子进程的fork()返回值为0
2. 子进程的pid序号紧接着父进程的序号
创建10个子进程
[root@localhost 03]# new fork() process pid = 11250
new fork() process pid = 11251
new fork() process pid = 11252
new fork() process pid = 11253
new fork() process pid = 11254
new fork() process pid = 11255
new fork() process pid = 11256
new fork() process pid = 11257
new fork() process pid = 11258
new fork() process pid = 11259
[root@localhost 03]#
[root@localhost 03]#
观察系统守护进程树
11250 ? Ss 0:00 ./test3-1
11251 ? S 0:00 \_ ./test3-1
11252 ? S 0:00 \_ ./test3-1
11253 ? S 0:00 \_ ./test3-1
11254 ? S 0:00 \_ ./test3-1
11255 ? S 0:00 \_ ./test3-1
11256 ? S 0:00 \_ ./test3-1
11257 ? S 0:00 \_ ./test3-1
11258 ? S 0:00 \_ ./test3-1
11259 ? S 0:00 \_ ./test3-1
11260 ? S 0:00 \_ ./test3-1
[root@localhost 03]#
fork()返回值的关系
在子进程中,fork返回值为0
在父进程中,fork返回值为子进程的pid
子进程直接复制父进程的PCB然后在fork紧接着的下一行开始执行(以防止fork中套fork的死循环情况)
僵尸进程
任何一个子进程(init除外)在exit()之后,并非马上就消失掉,而是留下一个称为僵尸进程(Zombie)的数据结构,等待父进程处理。
12711 ? Ss 0:00 ./test3-1
12712 ? Z 0:00 \_ [test3-1] <defunct>
12713 ? Z 0:00 \_ [test3-1] <defunct>
12722 ? Z 0:00 \_ [test3-1] <defunct>
12723 ? Z 0:00 \_ [test3-1] <defunct>
12724 ? Z 0:00 \_ [test3-1] <defunct>
12725 ? Z 0:00 \_ [test3-1] <defunct>
12726 ? Z 0:00 \_ [test3-1] <defunct>
12727 ? Z 0:00 \_ [test3-1] <defunct>
12729 ? Z 0:00 \_ [test3-1] <defunct>
12730 ? Z 0:00 \_ [test3-1] <defunct>
僵尸进程在ps -xf中的表示
杀死僵尸进程
使用pkill加进程名称,杀死全部进程
pkill test3-1
处理僵尸进程
- 通过信号机制
子进程退出时向父进程发送SIGCHILD信号,父进程处理SIGCHILD信号。在信号处理函数中调用wait进行处理僵尸进程。 - fork两次
《Unix 环境高级编程》8.6节说的非常详细。原理是将子进程成为孤儿进程,从而其的父进程变为init进程,通过init进程可以处理僵尸进程。
使用信号机制处理僵尸进程
在源文件中使用
signal(SIGCLD, SIG_IGN);
通知内核本进程不关心子进程的结束,子进程将被init释放
13206 ? Ss 0:00 ./test3-2
Linux Guard Service - 守护进程分裂的更多相关文章
- Linux Guard Service - 守护进程的作用、用途、父进程标识的特点
让test2直接成为守护进程 [root@localhost 02]# cat test2.c //test2 #include<stdio.h> #include<unistd.h ...
- Linux Guard Service - 守护进程再次分裂子进程
当系统区内存不能再申请新进程的时候申请会失败 在512MB内存下最多分配的子进程数 3331 [root@localhost 05]# ./test5-1 50000 expect 50000 sub ...
- Linux Guard Service - 进程分裂与脱离
进程分裂更名 void set_ps_name(char *name) { prctl(PR_SET_NAME, name); } 修改进程长名称 备份进程环境变量空间 for (i = 1; i & ...
- Linux Guard Service - 杀死守护进程
杀死某个子进程 杀死守护进程的子进程后,改进程会变为僵尸进程 14087 ? Ss 0:00 ./test4-1 14088 ? S 0:00 \_ ./test4-1 14089 ? S 0:00 ...
- 【Linux】- Ubuntu守护进程supervisor
linux的守护进程类似于windows的服务.linux通过supervisor创建守护进程. 1.安装supervisor sudo apt-get install supervisor 安装成功 ...
- Linux架构--------Rsync守护进程推和拉
一.Rsync基本概述 rsync是一款开源.快速.多功能.可实现全量及增量的本地或远程数据同步备份的优秀工具.rsync软件适用于Unix/linux/Windows等多种操作系统平台. 二.Rsy ...
- Linux 中的 守护进程
什么是守护进程 脱离控制终端的,运行于后端的进程,由系统管理的,按计划自动启动/停止/重启,用以执行特定的任务. 为什么要有守护进程? 在某些需求场景下,我们希望某项系统任务能够按计划按预期,始终/自 ...
- linux下的守护进程daemon
什么是守护进程?其实感觉守护进程并没有什么明确的定义,只是守护进程有一些特征,这是它需要遵循的. 守护进程的第一个特征是长时间在后台运行的程序,并且主要是为了提供某种服务,而为了能够让服务尽可能随时都 ...
- linux shell脚本守护进程监控svn服务
最近搭建的svn服务不知道什么原因服务总是被关闭(如果你不知道怎么搭建svn可以参考linux下搭建svn版本控制软件),因此用shell脚本实现一个守护进程.用于监控svn服务是否启动,如果服务不在 ...
随机推荐
- [Z] 用GDB调试程序
原文:http://blog.csdn.net/haoel/article/details/2879 用GDB调试程序 GDB概述———— GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工 ...
- C语言调用汇编
程序的入口是main,在main里调用汇编的函数. 首先要解决怎么定义函数的问题 在C语言中,要extern 一个函数声明即可,然后这个函数在汇编里面实现. 在汇编里面,用EXPORT 把C语言定义的 ...
- 「小程序JAVA实战」swagger2的使用与接口测试(34)
转自:https://idig8.com/2018/08/31/xiaochengxujavashizhanswagger2deshiyongyujiekouceshi34/ 我们已经开发完了一个用户 ...
- jBPM4.4 eclipse插件安装
一.工具下载 jBPM 图形化流程设计器采用eclipse做为平台,我们可以先到jBPM官方网站下jBPM4.4,地址:http://sourceforge.net/projects/jbpm ...
- Centos7安装jekyll
1.首先需要安装相应的依赖包及所需要的工具 sudo yum install nodejs npm ruby ruby-devel rubygems git 2.修改gem源 国内 使用的淘宝的更新源 ...
- SaltStack 的插件特性
:first-child { margin-top: 0; } blockquote > :last-child { margin-bottom: 0; } img { border: 0; m ...
- qt的exe文件查找依赖的dll
用qtcreater编译完工程生成的exe文件往往会依赖dll文件.如何一次定位exe文件所以依赖的所有dll文件呢,今天发现了软件叫hap-depends. 截图如下: 用这个软件打开exe文件就会 ...
- Html5新瓶装老酒之一--Touch事件处理
移动端的应用越来越多的开始采用html5来实现的.Html5有许多新特性需要开发者注意,比如css3,touch事件等等.比如做一个轮播图,分析其实现要领,有三点: 1.图片的轮播效果对应的css 样 ...
- jQuery代码在移动端不运行
今天写了个html网页发现在iOS系统上边不运行,于是真机连上Sarfari查看报错,于是乎 其实这是由于iOS的安全策略决定的,不允许加载非https的连接 报错:was not allowed t ...
- robotframework中文显示乱码
问题描述:接口.数据库返回信息有中文的时候会显示unicode的样式,如图 解决方法: 1.robotframework为3.0.X 2.找到Python安装目录下的\Lib\site-package ...