子进程wait参数详解
os模块的简介参看 Python::OS 模块 -- 简介
os模块的文件相关操作参看 Python::OS 模块 -- 文件和目录操作
os模块的进程参数 Python::OS 模块 -- 进程参数
这里我们介绍os模块中的进程管理相关的操作。
os模块提供给了我们访问操作系统功能的接口,我们可以通过os模块提供给我们的进程管理接口,编写多进程程序,这对编写高效、并发的程序提供了方便。
下面是一个最简单的父子进程交互的例子(仅限Unix系统下):
#! /usr/bin/python
# -*- coding: utf-8 -*- import os
import sys def child_process():
'''child process'''
print 'child process is running'
sys.exit(0) def parent_process():
'''parent process'''
print 'parent process is running'
print 'waiting for child process'
exit_stat = os.wait()
print "waited child process's PID = %d" % (exit_stat[0])
sys.exit(0) def main():
'''main function'''
try:
pid = os.fork()
if pid > 0:
'''parent process'''
parent_process()
else:
child_process()
except OSError, e:
print os.strerror(e.errno) if __name__ == '__main__':
main()
为了控制进程,我们需要学习os提供给我们的有关进程控制的接口,下面给出了os模块支持的进程操作(仅限Unix系统下):
进程管理
os模块提供了许多进程管理相关的操作,如果熟悉Unix下的系统编程的话,那么看到这些函数会觉得很熟悉,因为这些函数都是对相应的C API的Python实现,让我们看看都有些什么函数:
os.abort()
向调用该函数的进程发送一个SIGABRT信号,在Unix系统上默认的行为是产生一个core文件。
注意:当调用os.abort()函数的时候不会调用python的信号处理函数signal.signal()。
os.execl(path, arg0, arg1, ...)
os.execle(path, arg0, arg1, ..., env)
os.execlp(file, arg0, arg1, ...)
os.execlpe(file, arg0, arg1, ..., env)
os.execv(path, args)
os.execve(path, args, env)
os.execvp(file, args)
os.execvpe(file, args, env)
这些函数都执行一个新的程序,然后用新的程序替换当前子进程的进程空间,而该子进程从新程序的main函数开始执行。在Unix下,该新程序的进程id是原来被替换的子进程的进程id。在原来子进程中打开的所有描述符默认都是可用的,不会被关闭。
execv*系列的函数表示其接受的参数是以一个list或者是一个tuple表示的参数表
execl*系列的函数表示其接受的参数是一个个独立的参数传递进去的。
exec*p*系列函数表示在执行参数传递过去的命令时使用PATH环境变量来查找命令
exec*e系列函数表示在执行命令的时候读取该参数指定的环境变量作为默认的环境配置,最后的env参数必须是一个mapping对象,可以是一个dict类型的对象。
os._exit(n)
退出进程,并且返回退出状态n,在退出的时候不会执行清理工作,直接退出。
注意:正常的退出应该使用sys.exit(n),而_exit()函数一般只用在fork之后的子进程中调用以退出。
可用的退出状态(并不适用所有的Unix平台都可用):
os.EX_OK - 正常退出
os.EX_USAGE - 命令执行不正确,如命令参数错误
os.EX_DATAERR - 输入数据有误
os.EX_NOINPUT - 输入文件不存在或者不可读
os.EX_NOUSER - 指定的用户不存在
os.EX_NOHOST - 指定的主机id不存在
os.EX_UNAVAILABLE - 请求的服务不可用
os.EX_SOFTWARE - 内部软件错误
os.EX_OSERR - 操作系统错误
os.EX_OSFILE - 系统文件不存在
os.EX_CANTCREAT - 无法创建指定的输出文件
os.EX_IOERR - 在进行I/O操作时出错
os.EX_PROTOCOL - 协议切换操作非法,或者协议切换不可用
os.EX_NOPERM - 没有权限执行该操作
os.EX_CONFIG - 配置错误
os.fork()
fork出一个子进程,在子进程中返回0,在父进程中返回子进程ID,如果发生错误,则抛出OSError异常
注意:在一些平台下如FreeBSD,Cygwin和OS/2 EMX系统中使用该函数会有问题。
os.kill(pid, sig)
发送一个信号sig给进程id为pid的进程
os.nice(increment)
增加increment到进程的nice值,返回一个新的nice值。
os.system(command)
在一个shell中执行command命令,这是一个对C函数system()的python实现,具有相同的限制条件。在Unix系统中,返回值是命令执行后的退出状态值。由于POSIX没有为C函数system()的返回值指定明确的含义,所以os.system()的返回值依赖具体的系统。
os.times()
返回一个由浮点数组成的5元组,指定进程的累积运行时间,单位为秒(s)。时间包括:user time,system time,子进程的user time,子进程的system time 以及一个经过的墙上钟表时间。
os.wait()
等待任何一个子进程结束,返回一个tuple,包括子进程的进程ID和退出状态信息:一个16位的数字,低8位是杀死该子进程的信号编号,而高8位是退出状态(如果信号编号是0),其中低8位的最高位如果被置位,则表示产生了一个core文件。
os.waitpid(pid, options)
等待进程id为pid的进程结束,返回一个tuple,包括进程的进程ID和退出信息(和os.wait()一样),参数options会影响该函数的行为。在默认情况下,options的值为0。
如果pid是一个正数,waitpid()请求获取一个pid指定的进程的退出信息,如果pid为0,则等待并获取当前进程组中的任何子进程的值。如果pid为-1,则等待当前进程的任何子进程,如果pid小于-1,则获取进程组id为pid的绝对值的任何一个进程。当系统调用返回-1时,抛出一个OSError异常。
os.wait3(options)
和waitpid()函数类似,区别是不需要指定pid,函数返回一个3元组,包括结束的子进程的进程id,退出状态以及资源的使用信息。关于资源使用可以使用resource.getusage()来获取详细的信息。
os.wait4(pid, options)
和waitpid()函数类似,但是函数返回一个3元组外,这点和wait3()函数类似。
waitpid()函数的options选项:
os.WNOHANG - 如果没有子进程退出,则不阻塞waitpid()调用
os.WCONTINUED - 如果子进程从stop状态变为继续执行,则返回进程自前一次报告以来的信息。
os.WUNTRACED - 如果子进程被停止过而且其状态信息还没有报告过,则报告子进程的信息。
如下的函数用于处理那些自system(),wait()和waitpid()返回的状态信息,并将这些状态信息作为如下函数的参数传递。
os.WCOREDUMP(status)
如果一个core文件被创建,则返回True,否则返回False。
os.WIFCONTINUED(status)
如果一个进程被停止过,并且继续执行,则返回True,否则返回False。
os.WIFSTOPPED(status)
如果子进程被停止过,则返回True,否则返回False。
os.WIFSIGNALED(status)
如果进程由于信号而退出,则返回True,否则返回False。
os.WIFEXITED(status)
如果进程是以exit()方式退出的,则返回True,否则返回False。
os.WEXITSTATUS(status)
如果WIFEXITED(status)返回True,则返回一个整数,该整数是exit()调用的参数。否则返回值是未定义的。
os.WSTOPSIG(status)
返回导致进程停止的信号
os.WTERMSIG(status)
返回导致进程退出的信号
子进程wait参数详解的更多相关文章
- Xtrabackup 安装 参数详解
目录 安装 常用参数详解 innobackupex 相关参数 xtrabackup相关参数 安装 继Xtrabackup 介绍,本次来讲解安装和使用. Xtrabackup的RPM包下载地址: 系统版 ...
- Nginx主配置参数详解,Nginx配置网站
1.Niginx主配置文件参数详解 a.上面博客说了在Linux中安装nginx.博文地址为:http://www.cnblogs.com/hanyinglong/p/5102141.html b.当 ...
- iptables参数详解
iptables参数详解 搬运工:尹正杰 注:此片文章来源于linux社区. Iptalbes 是用来设置.维护和检查Linux内核的IP包过滤规则的. 可以定义不同的表,每个表都包含几个内部的链,也 ...
- chattr的常用参数详解
chattr的常用参数详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在实际生产环境中,有的运维工程师不得不和开发和测试打交道,在我们公司最常见的就是部署接口.每天每个人部署的 ...
- mha配置参数详解
mha配置参数详解: 参数名字 是否必须 参数作用域 默认值 示例 hostname Yes Local Only - hostname=mysql_server1, hostname=192.168 ...
- $.ajax()方法所有参数详解;$.get(),$.post(),$.getJSON(),$.ajax()详解
[一]$.ajax()所有参数详解 url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. type: 要求为String类型的参数,请求方式(post或get)默认为get.注 ...
- linux PHP 编译安装参数详解
linux PHP 编译安装参数详解 ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc -- ...
- 【转】jqGrid 各种参数 详解
[原文]http://www.cnblogs.com/younggun/archive/2012/08/27/2657922.htmljqGrid 各种参数 详解 JQGrid JQGrid是一个 ...
- HTML滚动字幕代码参数详解及Js间隔滚动代码
html文字滚动代码 <marquee style="WIDTH: 388px; HEIGHT: 200px" scrollamount="2" dire ...
随机推荐
- 关于bc中小数点length,scale,(())以及进制转换
这是我在codewar上遇到的一个题,我用我自己的方法做出了解答,如下: 1 #!/bin/bash 2 3 distance=`echo "$1*10000"|bc|cut -d ...
- $GLOBALS['HTTP_RAW_POST_DATA']与$_POST的区别
$HTTP_RAW_POST_DATA The RAW / uninterpreted HTTP POst information can be accessed with: $GLOBALS ...
- MYSQL不能显示中文字,显示错误“ERROR 1366 (HY000): Incorrect string value: '\xE5\xBC\xA0\xE4\xB8\x89'”
或者建表时带上编码utf8 CREATE TABLE `students`( `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY, `name` VARCHAR( ...
- jenkins+svn+pipeline+kubernetes部署java应用(一)
一.linux安装svn服务端 yum -y install subversion 二.创建svn版本库(项目仓库) mkdir -p /home/svn svnadmin create /home/ ...
- charles抓手机包
charles抓手机包 如果是使用charles抓包.一定要tm的保证手机和电脑连的是一个网. 1.proxy setting,查看charles,端口 2.勾选 3.ipconfig,查 ...
- 详解wordpress如何把文件保存到阿里云OSS上!
自己搞了一个Wordpress的博客,装完之后一直晾着没管,最近闲来开荒.为了减小服务器的带宽.存储.CUP的压力,决定把博客中的所有文件都保存到阿里云OSS上面. 关于这个问题,自己去调用OSS的S ...
- 一个炫酷的flash网站模板
这是一个炫酷的flash欧美网站模板,它包括首页,公司简介,留言等五个页面,界面转换非常的炫酷!他还有时间.全屏.背景音乐开关的功能!有兴趣的朋友可以看看!贴几张网站图片给大家看看! 下载后直接找到s ...
- 爬虫之scrapy工作流程
Scrapy是什么? scrapy 是一个为了爬取网站数据,提取结构性数据而编写的应用框架,我们只需要实现少量代码,就能够快速的抓取到数据内容.Scrapy 使用了 Twisted['twɪstɪd] ...
- Liunx将私密代理添加到环境变量
.bash_profile文件存在于用户主目录下,绝对路径为/home/$name/.bash_profile.bash_profile文件是隐藏文件,里面包含的是用户的用户的环境变量. 注意: 这个 ...
- 网络编程-TCP/IP各层介绍(5层模型讲解)
1.TCP/IP五层协议讲解 物理层--数据链路层--网络层--传输层--应用层 我们将应用层,表示层,会话层并作应用层,从tcp/ip五层协议的角度来阐述每层的由来与功能,搞清楚了每层的主要协议 就 ...