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-111251 ? S 0:00 \_ ./test3-111252 ? S 0:00 \_ ./test3-111253 ? S 0:00 \_ ./test3-111254 ? S 0:00 \_ ./test3-111255 ? S 0:00 \_ ./test3-111256 ? S 0:00 \_ ./test3-111257 ? S 0:00 \_ ./test3-111258 ? S 0:00 \_ ./test3-111259 ? S 0:00 \_ ./test3-111260 ? 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-112712 ? 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
转载于:https://www.cnblogs.com/liutianchen/p/8503531.html
Linux Guard Service - 守护进程分裂相关推荐
- linux怎么监控守护进程,linux shell脚本守护进程监控svn服务
最近搭建的svn服务不知道什么原因服务总是被关闭(如果你不知道怎么搭建svn可以参考linux下搭建svn版本控制软件),因此用shell脚本实现一个守护进程.用于监控svn服务是否启动,如果服务不在 ...
- C语言实现Linux系统的守护进程创建
大家好,我是练习编程时长两年半的昆工第一ikun,今天我们来分享一下进程的有关知识,并且用c语言来创建一个Linux系统的守护进程. 目录 一.进程相关接口函数 1.创建子进程 -- fork ( ...
- 【Linux】Linux Systemd 启动守护进程
1.概述 转载:http://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-commands.html 去看原文吧,排版比较好,这里转载防丢失 Sy ...
- linux daemon(守护进程)
什么是Daemon Daemon程序,又称为守护进程,通常在系统后台长时间运行,由于没有控制终端而无法与前台交互.Daemon程序一般作为系统服务使用.Unix/Linux中的daemon进程类似于W ...
- linux中Daemon守护进程编程
守护进程,也就是通常说的Daemon进程,是Linux中的后台服务进程.它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件.守护进程常常在系统引导装入时启动, ...
- linux下daemon守护进程的实现(以nginx代码为例)
ngx_int_t ngx_daemon(ngx_log_t *log) {int fd;// 让init进程成为新产生进程的父进程:// 调用fork函数创建子进程后,使父进程立即退出.这样,产生的 ...
- linux使用man守护进程,man手册的使用
在Linux中man的使用频率应该是很高的,灵活运用它可以让自己快速的掌握一个不熟悉命令的使用方法.下面来介绍下man man – format and display the on-line man ...
- 【Linux编程】守护进程(daemon)详解与创建
本文主要参考自:linux系统编程之进程(八):守护进程详解及创建,daemon()使用 一.概述 Daemon(守护进程)是运行在后台的一种特殊进程.它独立于控制终端并且周期性地执行某种任务或等待处 ...
- Linux任务管理与守护进程
文章目录 任务管理 进程组概念 作业概念 会话概念 相关操作 前台进程&后台进程 jobs.fg.bg ps命令查看指定的选项 守护进程 守护进程的概念 守护进程的查看 守护进程的创建 原生创 ...
最新文章
- mysql 插入指定值_mysql实现随机把字段值插入指定表
- html怎么用ui打开,HTML5教程 如何使用原生UI
- MC34063组成DC-DC电路
- 《应用程序性能测试的艺术(第2版)》—第2章 2.4节小结
- JAVA基础实例(三)--排序
- vs2010帮助文件安装完全攻略
- URI、URL和URN的关系
- php公众号客服消息图文,微信公众号开发系列-发送客服消息(示例代码)
- docker命令的使用
- LDA-线性判别分析
- html公历农历相互转换,JavaScript实现公历转换农历
- ITX迷你主机的优点及缺点
- 线性高电压稳压器的制作
- 【疯狂诗词大会小程序2.0】功能模块+前端+诗词答题小程序+内置数千道题目+开箱即用
- Android 收银机Wifi 连接厨房厨单打印机
- 1046 mysql_MYSQL 1046 错误求助:
- 贝叶斯统计推断(一)
- 【射影几何05】齐次坐标系(Homogeneous coordinates)
- 重磅 | 向未来致敬!2017网易未来科技峰会乌镇论坛将于12月4日在乌镇举办
- C/C++静态代码分析工具