linux 父子进程结束,Linux下让父进程结束后,子进程自动结束
在多进程编程的时候,经常会遇到这样的情况。父进程创建了一堆子进程,当遇到错误或者操作失误的时候把父进程关闭了,但是子进程还在跑,不得不一个一个地杀死子进程,或者使用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下让父进程结束后,子进程自动结束相关推荐
- 信号量SIGCHLD的使用,如何让父进程得知子进程执行结束,如何让父进程区分多个子进程的结束
本教程基于 Ubuntu 20.10 gcc 10.2.0. 示例程序如果不能正常编译和执行,说明您系统和工具版本与我的不匹配,请自行查阅资料. 0 概述 先给出该信号的描述: Signal Valu ...
- 使用父子两个进程拷贝同一个文件,父进程拷贝前一半,子进程拷贝后一半。
#include <head.h> // 父子进程在宏观上同时执行,微观上实际是时间片轮询串行. //两个进程同时调用同一个拷贝函数进行拷贝 int get_file_len(const ...
- tasklist 结束进程_Windows: windows下的终止进程的命令(tasklist/tskill)
在Unix/Linux下可以使用ps/kill命令查找/终止一个正在运行的进程, Windows平台下也有一组类似的命令: tasklist/tskill C:\>tskill /? 结束进程. ...
- python获取进程编号(目的、获取当前进程编号、根据编号杀死指定进程号、获取当前父进程编号)
1. 获取进程编号的目的 获取进程编号的目的是验证主进程和子进程的关系,可以得知子进程是由那个主进程创建出来的. 获取进程编号的两种操作 获取当前进程编号 获取当前父进程编号 2. 获 ...
- linux rm 文件找回_linux下执行rm -rf命令后如何恢复
果真感觉蛋疼了,欲哭无泪啊!写了一天的成果,想着把之前备份的文件删除呢,结果把刚写完的删了. 国外著名linx管理员守则中有这么一条:"慎用rm -rf命令,除非你知道此命令将带来什么后果. ...
- 杰理之播歌下通话或者开启 siri 后,通话结束或退出 siri 后音量跟之前不一 致的问题【篇】
库里面有新的音量设置流程会在通话结束后再 去设置一次音量,导致模拟音量无法恢复到播歌时的大小
- Linux下的进程概论与编程二(进程控制)
一.进程标识符 1.每个进程都有非负的整形表示唯一的进程ID. 几个典型进程的ID及其功能: 2.除了进程ID,每个进程还有一些其他的标识符. 下列函数返回这些标识符: #include <sy ...
- Linux 的父进程和子进程的执行情况(附有案例代码)
系列文章目录 该文章主要是针对面试做大致的了解,通俗易懂!!! 一.父进程.子进程的定义 1.父进程 指已创建一个或多个子进程的进程.在Linux里,除了进程0以外的所有进程都是由其他进程使用系统调用 ...
- 通过fork来剖析Linux内核的内存管理和进程管理(下)
上一篇文章我们讲到fork的时候内存管理相关的内容,时间大概隔了快一周了,发布下篇文章,写文章确实费时费力,需要仔细推敲,原创不易,希望大家多多支持吧.本文讲解fork的时候进程管理相关的内容,主要讲 ...
最新文章
- Asp.net 1.0 升级至 ASP.NET 2.0十个问题总结
- SAP QM初阶之检验批系统状态中的CTCM该如何消除?
- latex如何清除表格table的浮动位置(表格自动上移)
- cxGrid 使用指南 1
- Oracle 数据库版本和位数sql语句查看方法
- 详解tf.nn.dropout
- [vue] 移动端ui你用的是哪个ui库?有遇到过什么问题吗?
- python多列排序
- 硬盘使用GPT方式安装windows 10方法
- Git 学习笔记(二)分支管理
- Vue项目部署到SpringBoot工程下
- 监听listview item兼容于checkbox/textview/imageview
- android studio for android learning (十九 ) 最新Handler消息传递机制全解
- 视频相似度检测算法软件,视频相似度检测算法图
- c语言实现十进制转换其他进制的代码
- shiro权限框架中五张基本数据表
- 常见的软件系统集成方式和Smartbi集成解决方案
- windows蓝屏原因速查表(常见蓝屏原因与解决方法速查(适用于Windows 7/8/8.1/10/11))
- 谷歌drive收费_Google Drive的系统设计分析
- 重磅上线!万兴科技旗下亿图图示12.0打造全新智能绘图体验
热门文章
- python获取方法的装饰方法_python中的方法和装饰器
- codeforces Round #320 (Div. 2) C. A Problem about Polyline(数学) D. Or Game(暴力,数学)
- Python 装饰器详解(中)
- kvm上添加万兆网卡_烂泥:为KVM虚拟机添加网卡
- sql同时操作两列_怎么在两列同时筛选数据库
- 【转】超酷的 mip-infinitescroll 无限滚动(无限下拉)
- java应用中的日志介绍
- 一些adb的常用命令
- 8.4. su - root
- Flask+uwsgi+Nginx环境搭建