在多进程编程的时候,经常会遇到这样的情况。父进程创建了一堆子进程,当遇到错误或者操作失误的时候把父进程关闭了,但是子进程还在跑,不得不一个一个地杀死子进程,或者使用ps,grep,awk,kill来配合批量杀死。

之前在写 xxfpm(一个PHP-CGI的进程管理) 的时候,在Linux下使用父进程给子进程信号通知的方式来达到用户杀死父进程时,子进程也随即关闭。但是这种方法不太完美。例如,如果父进程被KILL信号杀死,完全没有机会给子进程发送信号了。

在网上搜了一下,用Linux下libc的prctl设置PR_SET_PDEATHSIG属性,似乎可以让子进程在父进程自动结束后接收到信号。这个方法似乎很完美!!!

PR_SET_PDEATHSIG (since Linux 2.1.57)

Set the parent process death signal of the calling process to arg2

(either a signal value in the range 1..maxsig, or 0 to clear). This is

the signal that the calling process will get when its parent dies.

This value is cleared for the child of a fork(2).

测试代码:

view plaincopy to clipboardprint?

01.#!/usr/bin/env python

02.

03.import os

04.import ctypes

05.import time

06.

07.libc = ctypes.CDLL('libc.so.6')

08.

09.for i in xrange(4):

10. pid = os.fork()

11. if pid == 0:

12. libc.prctl(1, 15)

13. while True:

14. print 'Child:', i

15. time.sleep(1)

16. raise SystemExit

17.

18.print 'Wait for 10 sec...'

19.time.sleep(10)

20.print 'Exit'

linux 父子进程结束,Linux下让父进程结束后,子进程自动结束相关推荐

  1. 信号量SIGCHLD的使用,如何让父进程得知子进程执行结束,如何让父进程区分多个子进程的结束

    本教程基于 Ubuntu 20.10 gcc 10.2.0. 示例程序如果不能正常编译和执行,说明您系统和工具版本与我的不匹配,请自行查阅资料. 0 概述 先给出该信号的描述: Signal Valu ...

  2. 使用父子两个进程拷贝同一个文件,父进程拷贝前一半,子进程拷贝后一半。

    #include <head.h> // 父子进程在宏观上同时执行,微观上实际是时间片轮询串行. //两个进程同时调用同一个拷贝函数进行拷贝 int get_file_len(const ...

  3. tasklist 结束进程_Windows: windows下的终止进程的命令(tasklist/tskill)

    在Unix/Linux下可以使用ps/kill命令查找/终止一个正在运行的进程, Windows平台下也有一组类似的命令: tasklist/tskill C:\>tskill /? 结束进程. ...

  4. python获取进程编号(目的、获取当前进程编号、根据编号杀死指定进程号、获取当前父进程编号)

    1. 获取进程编号的目的         获取进程编号的目的是验证主进程和子进程的关系,可以得知子进程是由那个主进程创建出来的. 获取进程编号的两种操作 获取当前进程编号 获取当前父进程编号 2. 获 ...

  5. linux rm 文件找回_linux下执行rm -rf命令后如何恢复

    果真感觉蛋疼了,欲哭无泪啊!写了一天的成果,想着把之前备份的文件删除呢,结果把刚写完的删了. 国外著名linx管理员守则中有这么一条:"慎用rm -rf命令,除非你知道此命令将带来什么后果. ...

  6. 杰理之播歌下通话或者开启 siri 后,通话结束或退出 siri 后音量跟之前不一 致的问题【篇】

    库里面有新的音量设置流程会在通话结束后再 去设置一次音量,导致模拟音量无法恢复到播歌时的大小

  7. Linux下的进程概论与编程二(进程控制)

    一.进程标识符 1.每个进程都有非负的整形表示唯一的进程ID. 几个典型进程的ID及其功能: 2.除了进程ID,每个进程还有一些其他的标识符. 下列函数返回这些标识符: #include <sy ...

  8. Linux 的父进程和子进程的执行情况(附有案例代码)

    系列文章目录 该文章主要是针对面试做大致的了解,通俗易懂!!! 一.父进程.子进程的定义 1.父进程 指已创建一个或多个子进程的进程.在Linux里,除了进程0以外的所有进程都是由其他进程使用系统调用 ...

  9. 通过fork来剖析Linux内核的内存管理和进程管理(下)

    上一篇文章我们讲到fork的时候内存管理相关的内容,时间大概隔了快一周了,发布下篇文章,写文章确实费时费力,需要仔细推敲,原创不易,希望大家多多支持吧.本文讲解fork的时候进程管理相关的内容,主要讲 ...

最新文章

  1. Asp.net 1.0 升级至 ASP.NET 2.0十个问题总结
  2. SAP QM初阶之检验批系统状态中的CTCM该如何消除?
  3. latex如何清除表格table的浮动位置(表格自动上移)
  4. cxGrid 使用指南 1
  5. Oracle 数据库版本和位数sql语句查看方法
  6. 详解tf.nn.dropout
  7. [vue] 移动端ui你用的是哪个ui库?有遇到过什么问题吗?
  8. python多列排序
  9. 硬盘使用GPT方式安装windows 10方法
  10. Git 学习笔记(二)分支管理
  11. Vue项目部署到SpringBoot工程下
  12. 监听listview item兼容于checkbox/textview/imageview
  13. android studio for android learning (十九 ) 最新Handler消息传递机制全解
  14. 视频相似度检测算法软件,视频相似度检测算法图
  15. c语言实现十进制转换其他进制的代码
  16. shiro权限框架中五张基本数据表
  17. 常见的软件系统集成方式和Smartbi集成解决方案
  18. windows蓝屏原因速查表(常见蓝屏原因与解决方法速查(适用于Windows 7/8/8.1/10/11))
  19. 谷歌drive收费_Google Drive的系统设计分析
  20. 重磅上线!万兴科技旗下亿图图示12.0打造全新智能绘图体验

热门文章

  1. python获取方法的装饰方法_python中的方法和装饰器
  2. codeforces Round #320 (Div. 2) C. A Problem about Polyline(数学) D. Or Game(暴力,数学)
  3. Python 装饰器详解(中)
  4. kvm上添加万兆网卡_烂泥:为KVM虚拟机添加网卡
  5. sql同时操作两列_怎么在两列同时筛选数据库
  6. 【转】超酷的 mip-infinitescroll 无限滚动(无限下拉)
  7. java应用中的日志介绍
  8. 一些adb的常用命令
  9. 8.4. su - root
  10. Flask+uwsgi+Nginx环境搭建