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参数详解的更多相关文章

  1. Xtrabackup 安装 参数详解

    目录 安装 常用参数详解 innobackupex 相关参数 xtrabackup相关参数 安装 继Xtrabackup 介绍,本次来讲解安装和使用. Xtrabackup的RPM包下载地址: 系统版 ...

  2. Nginx主配置参数详解,Nginx配置网站

    1.Niginx主配置文件参数详解 a.上面博客说了在Linux中安装nginx.博文地址为:http://www.cnblogs.com/hanyinglong/p/5102141.html b.当 ...

  3. iptables参数详解

    iptables参数详解 搬运工:尹正杰 注:此片文章来源于linux社区. Iptalbes 是用来设置.维护和检查Linux内核的IP包过滤规则的. 可以定义不同的表,每个表都包含几个内部的链,也 ...

  4. chattr的常用参数详解

    chattr的常用参数详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在实际生产环境中,有的运维工程师不得不和开发和测试打交道,在我们公司最常见的就是部署接口.每天每个人部署的 ...

  5. mha配置参数详解

    mha配置参数详解: 参数名字 是否必须 参数作用域 默认值 示例 hostname Yes Local Only - hostname=mysql_server1, hostname=192.168 ...

  6. $.ajax()方法所有参数详解;$.get(),$.post(),$.getJSON(),$.ajax()详解

    [一]$.ajax()所有参数详解 url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. type: 要求为String类型的参数,请求方式(post或get)默认为get.注 ...

  7. linux PHP 编译安装参数详解

    linux PHP 编译安装参数详解 ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc -- ...

  8. 【转】jqGrid 各种参数 详解

      [原文]http://www.cnblogs.com/younggun/archive/2012/08/27/2657922.htmljqGrid 各种参数 详解 JQGrid JQGrid是一个 ...

  9. HTML滚动字幕代码参数详解及Js间隔滚动代码

    html文字滚动代码 <marquee style="WIDTH: 388px; HEIGHT: 200px" scrollamount="2" dire ...

随机推荐

  1. Sum All Numbers in a Range-freecodecamp算法题目

    Sum All Numbers in a Range 要求 给你一个包含两个数字的数组.返回这两个数字和它们之间所有数字的和. 最小的数字并非总在最前面. 思路 定义结果变量num 在for循环中,i ...

  2. kmp和hash 字符串处理 哈希表

    来自http://www.ruanyifeng.com/blog/2013/05/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm.html 并进行自己的简单整 ...

  3. Linux系统入门-Bash初识

    目录 Linux系统入门-Bash初识 Bash Shell介绍 Bash Shell的作用 Bash的两种使用方式 命令提示符 shell的基础语法 shell的基本特性 命令补全 linux快捷键 ...

  4. day 37 MySQL行(记录)的详细操作

    MySQL行(记录)的详细操作   阅读目录 一 介绍 二 插入数据INSERT 三 更新数据UPDATE 四 删除数据DELETE 五 查询数据SELECT 六 权限管理 一 介绍 MySQL数据操 ...

  5. python并发编程之线程(创建线程,锁(死锁现象,递归锁),GIL锁)

    什么是线程 进程:资源分配单位 线程:cpu执行单位(实体),每一个py文件中就是一个进程,一个进程中至少有一个线程 线程的两种创建方式: 一 from threading import Thread ...

  6. Html5_标签

    HTML 1.一套规则,浏览器认识的规则. 2.开发者: 学习Html规则 开发后台程序: - 写Html文件(充当模板的作用) ****** - 数据库获取数据,然后替换到html文件的指定位置(W ...

  7. Linux异常体系之vector_stub宏解析

    ARM-Linux汇编的宏定义语法说明如下: 使用注意: 1.宏定义以.macro开始,以.endm结束 2.可带参数,参数可有默认值 3.直接使用参数的名字\arg vector_stub宏的功能: ...

  8. 在Unix系统上,从源文件、目标文件、可执行文件的编译过程

    是由“编译器驱动”(compiler driver)完成的: unix> gcc -o hello hello.c 在这里,gcc的编译器驱动程序读取源文件hello.c, #include & ...

  9. Statues CodeForces - 129C(bfs)

    In this task Anna and Maria play a game with a very unpleasant rival. Anna and Maria are in the oppo ...

  10. 同一条sql在mysql5.6和5.7版本遇到的问题。

    之前用的是mysql 5.6版本,执行select * from table group by colunm 是可以出结果的, 但是切换的5.7版本,这条sql就报错, Expression #1 o ...