subprocess.popen.kill杀死所有子进程
2011-06-14 11:58
190 查看
使用subprocess模块可创建子进程。
subprocess.
Popen
(
args
, bufsize=0
, executable=None
, stdin=None
, stdout=None
, stderr=None
, preexec_fn=None
, close_fds=False
, shell=False
, cwd=None
, env=None
, universal_newlines=False
, startupinfo=None
, creationflags=0
)
subprocess.Popen(['google-chrome',"http://www.baidu.com"])可打开chrome并显示百度网页。
subprocess.Popen.pid可显示子进程的id,但这只是打开的shell的id,如果此时使用pid.kill是无法杀掉所有子进程的。
杀掉所有子进程,代码:
import sys, os, subprocess, time, signal
p = subprocess.Popen(['google-chrome',"http://www.baidu.com"], close_fds=True, preexec_fn = os.setsid)
print p.pid
time.sleep(5)
# p.kill() #无法杀掉所有子进程,只能杀掉子shell的进程
# p.terminate() #无法杀掉所有子进程
os.killpg( p.pid,signal.SIGUSR1)
time.sleep(3)
注意:
close_fds=True,此时除了文件描述符为0
, 1
and
2,其他子进程都要被杀掉。(
Linux中所有的进程都是进程0的子进程。
pid=1的是init,内核完成之后启动的第一个进程,然后init根据/etc/inittab的内容再去启动其它进程。)
os.setsid(): 使独立于终端的进程(不响应sigint,sighup等),使脱离终端。
SIGUSR1: 用户自定义信号
os.killpg( p.pid,signal.SIGUSR1): 发送SIGUSR1信号到组进程p.pid
subprocess.
Popen
(
args
, bufsize=0
, executable=None
, stdin=None
, stdout=None
, stderr=None
, preexec_fn=None
, close_fds=False
, shell=False
, cwd=None
, env=None
, universal_newlines=False
, startupinfo=None
, creationflags=0
)
subprocess.Popen(['google-chrome',"http://www.baidu.com"])可打开chrome并显示百度网页。
subprocess.Popen.pid可显示子进程的id,但这只是打开的shell的id,如果此时使用pid.kill是无法杀掉所有子进程的。
杀掉所有子进程,代码:
import sys, os, subprocess, time, signal
p = subprocess.Popen(['google-chrome',"http://www.baidu.com"], close_fds=True, preexec_fn = os.setsid)
print p.pid
time.sleep(5)
# p.kill() #无法杀掉所有子进程,只能杀掉子shell的进程
# p.terminate() #无法杀掉所有子进程
os.killpg( p.pid,signal.SIGUSR1)
time.sleep(3)
注意:
close_fds=True,此时除了文件描述符为0
, 1
and
2,其他子进程都要被杀掉。(
Linux中所有的进程都是进程0的子进程。
pid=1的是init,内核完成之后启动的第一个进程,然后init根据/etc/inittab的内容再去启动其它进程。)
os.setsid(): 使独立于终端的进程(不响应sigint,sighup等),使脱离终端。
SIGUSR1: 用户自定义信号
os.killpg( p.pid,signal.SIGUSR1): 发送SIGUSR1信号到组进程p.pid
相关文章推荐
- 使用 subprocess.Popen 创建子进程
- Python使用subprocess.Popen导致子进程hang住
- kill 命令杀死父进程和所有子进程
- Python执行系统命令,os.system && os.popen && subprocess.Popen
- Python_cmd的各种实现方法及优劣(subprocess.Popen, os.system和commands.getstatusoutput)
- python subprocess Popen
- python 使用 subprocess.Popen() 调用子进程
- ps kill awk 杀死同一个应用的所有进程
- python subprocess Popen
- 关于python subprocess的popen
- Python执行shell脚本的几种方式(最好用subprocess.Popen来替代os.system)
- Python_cmd的各种实现方法及优劣(subprocess.Popen, os.system和commands.getstatusoutput)
- Python_cmd的各种实现方法及优劣(subprocess.Popen, os.system和commands.getstatusoutput)
- Python_cmd的各种实现方法及优劣(subprocess.Popen, os.system和commands.getstatusoutput)
- python subprocess.Popen 非阻塞
- subprocess.Popen指令包含中文导致乱码问题解决
- shell脚本杀死进程及所有子进程
- Python Subprocess Popen 管道阻塞问题分析解决
- python subprocess Popen
- 杀死进程代码Process.Kill()