分裂守护进程

由于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

处理僵尸进程

  1. 通过信号机制
    子进程退出时向父进程发送SIGCHILD信号,父进程处理SIGCHILD信号。在信号处理函数中调用wait进行处理僵尸进程。
  2. 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 - 守护进程分裂相关推荐

  1. linux怎么监控守护进程,linux shell脚本守护进程监控svn服务

    最近搭建的svn服务不知道什么原因服务总是被关闭(如果你不知道怎么搭建svn可以参考linux下搭建svn版本控制软件),因此用shell脚本实现一个守护进程.用于监控svn服务是否启动,如果服务不在 ...

  2. C语言实现Linux系统的守护进程创建

      大家好,我是练习编程时长两年半的昆工第一ikun,今天我们来分享一下进程的有关知识,并且用c语言来创建一个Linux系统的守护进程. 目录 一.进程相关接口函数 1.创建子进程 -- fork ( ...

  3. 【Linux】Linux Systemd 启动守护进程

    1.概述 转载:http://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-commands.html 去看原文吧,排版比较好,这里转载防丢失 Sy ...

  4. linux daemon(守护进程)

    什么是Daemon Daemon程序,又称为守护进程,通常在系统后台长时间运行,由于没有控制终端而无法与前台交互.Daemon程序一般作为系统服务使用.Unix/Linux中的daemon进程类似于W ...

  5. linux中Daemon守护进程编程

    守护进程,也就是通常说的Daemon进程,是Linux中的后台服务进程.它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件.守护进程常常在系统引导装入时启动, ...

  6. linux下daemon守护进程的实现(以nginx代码为例)

    ngx_int_t ngx_daemon(ngx_log_t *log) {int fd;// 让init进程成为新产生进程的父进程:// 调用fork函数创建子进程后,使父进程立即退出.这样,产生的 ...

  7. linux使用man守护进程,man手册的使用

    在Linux中man的使用频率应该是很高的,灵活运用它可以让自己快速的掌握一个不熟悉命令的使用方法.下面来介绍下man man – format and display the on-line man ...

  8. 【Linux编程】守护进程(daemon)详解与创建

    本文主要参考自:linux系统编程之进程(八):守护进程详解及创建,daemon()使用 一.概述 Daemon(守护进程)是运行在后台的一种特殊进程.它独立于控制终端并且周期性地执行某种任务或等待处 ...

  9. Linux任务管理与守护进程

    文章目录 任务管理 进程组概念 作业概念 会话概念 相关操作 前台进程&后台进程 jobs.fg.bg ps命令查看指定的选项 守护进程 守护进程的概念 守护进程的查看 守护进程的创建 原生创 ...

最新文章

  1. mysql 插入指定值_mysql实现随机把字段值插入指定表
  2. html怎么用ui打开,HTML5教程 如何使用原生UI
  3. MC34063组成DC-DC电路
  4. 《应用程序性能测试的艺术(第2版)》—第2章 2.4节小结
  5. JAVA基础实例(三)--排序
  6. vs2010帮助文件安装完全攻略
  7. URI、URL和URN的关系
  8. php公众号客服消息图文,微信公众号开发系列-发送客服消息(示例代码)
  9. docker命令的使用
  10. LDA-线性判别分析
  11. html公历农历相互转换,JavaScript实现公历转换农历
  12. ITX迷你主机的优点及缺点
  13. 线性高电压稳压器的制作
  14. 【疯狂诗词大会小程序2.0】功能模块+前端+诗词答题小程序+内置数千道题目+开箱即用
  15. Android 收银机Wifi 连接厨房厨单打印机
  16. 1046 mysql_MYSQL 1046 错误求助:
  17. 贝叶斯统计推断(一)
  18. 【射影几何05】齐次坐标系(Homogeneous coordinates)
  19. 重磅 | 向未来致敬!2017网易未来科技峰会乌镇论坛将于12月4日在乌镇举办
  20. C/C++静态代码分析工具

热门文章

  1. 修复python命令行下接收不到参数的问题
  2. 手工给alv添加合计
  3. 零基础带你学习MySQL—foreign key 外键(二十六)
  4. 图解HTTP笔记(一)
  5. mysql中游标能不能更新数据库_数据库游标更新数据
  6. DLog-M什么意思
  7. 白酒板块集体杀跌,我是不是该卖出手中的白酒基金了?
  8. 为什么感觉iPhone 11还有很多人去买?
  9. 财务人员工资那么低,财务工作真的有价值吗?
  10. 职场中显情商低的三种行为