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)

返回导致进程退出的信号

Python::OS 模块 -- 进程管理的更多相关文章

  1. Python::OS 模块 -- 进程参数

    os模块的简介请参看 Python::OS 模块 -- 简介 os模块的文件和目录操作 Python::OS 模块 -- 文件和目录操作 os模块的进程管理 Python::OS 模块 -- 进程管理 ...

  2. python os模块进程函数

    Table of Contents 1. 系统进程 2. 举例 2.1. os.fork 2.2. os.exec 和 os.system 2.3. os.wait 3. 总结 系统进程 今天在看&l ...

  3. Python::OS 模块 -- 文件和目录操作

    os模块的简介参看 Python::OS 模块 -- 简介 os模块的进程管理 Python::OS 模块 -- 进程管理 os模块的进程参数 Python::OS 模块 -- 进程参数 os模块中包 ...

  4. Python::OS 模块 -- 简介

    OS 模块简介 OS模块是Python标准库中的一个用于访问操作系统功能的模块,OS模块提供了一种可移植的方法使用操作系统的功能.使用OS模块中提供的接口,可以实现跨平台访问.但是在OS模块中的接口并 ...

  5. Python OS模块标准库的系统接口及操作方法

    Python OS模块标准库的系统接口及操作方法 os.name 返回当前操作系统名,定义了'posix','nt','mac','os2','ce','java'(我使用win7/python3.1 ...

  6. supervisor python开发的进程管理工具

    Supervisor (http://supervisord.org) 是一个用 Python 写的进程管理工具,可以很方便的用来启动.重启.关闭进程(不仅仅是 Python 进程).除了对单个进程的 ...

  7. python OS 模块 文件目录操作

    Python OS 模块 文件目录操作 os模块中包含了一系列文件操作的函数,这里介绍的是一些在Linux平台上应用的文件操作函数.由于Linux是C写的,低层的libc库和系统调用的接口都是C AP ...

  8. python os模块学习

    一.os模块概述 Python os模块包含普遍的操作系统功能.如果你希望你的程序能够与平台无关的话,这个模块是尤为重要的. 二.常用方法 1.os.name 输出字符串指示正在使用的平台.如果是wi ...

  9. python os模块详解

    一.Python os模块(Linux环境) 1.1 执行shell命令 os.system('cmd') 执行命令不保存结果 os.popen('command') 执行后返回结果,使用.read( ...

随机推荐

  1. SNMP OID列表 监控需要用到的OID

    zabbix的snmp监控还没开始讲,不过先给大家列一些snmp常用的一些OID,比如cpu.内存.硬盘什么的.先了解这些,在使用snmp监控服务器. 系统参数(1.3.6.1.2.1.1) OID ...

  2. ubuntu 到底是选择32位还是64位?

     ubuntu 到底是选择32位还是64位? 2011-06-03 15:16:31 标签:ubuntu linux 休闲 cpu 职场 原文出处:官方wiki原文作者:授权许可: 创作共用协议Att ...

  3. redis参数与持久化原理

    [root@JR hx]# redis-cli info # Server redis_version:2.8.19 redis_git_sha1:00000000 redis_git_dirty:0 ...

  4. 常用webservice接口

    商业和贸易: 1.股票行情数据 WEB 服务(支持香港.深圳.上海基金.债券和股票:支持多股票同时查询) Endpoint: http://webservice.webxml.com.cn/WebSe ...

  5. js函数、变量提升(hoisting)

    其实我只是想复习下变量提升的,然后看到了函数提升,然后再看到了函数声明.函数表达式. 有必要怀着敬仰之心提及园子里的TOM大叔的解密命名函数表达式,不愧是大叔,好好地脑补了下基础知识. 在ECMASc ...

  6. 从BATS交易所获取空头头寸

    Getting short volume from BATS   In my last post I have gone through the steps needed to get the sho ...

  7. sqlAlchemy 按DateTime字段的年或月进行group_by查询

    一.根据”create_date“查询每天的数据 1.查询2016年5月每天的数据 session.query(extract('day', User.create_date).label('day' ...

  8. JS判断数组中是否有重复元素的方法

    判断数组中是否有重复元素,最容易想到的方法是使用2重循环,逐个遍历,比较,但是这个是最慢,最笨的方法,百度得出了更好的方法. var ary = new Array("111",& ...

  9. (37) 在命令行调用API

    l 前言 有时为了更好地调整和改动数据会和到cli ,这会给我们带来更高的效率,基于官网的文档很是简单,这里就带大家一起运用 cli l 搭建 在项目下面有文件odoo.py 这个文件 ,对就是用这个 ...

  10. Linux cat命令的使用

    cat命令主要用来查看文件内容,创建文件,文件合并,追加文件内容等功能.   A:查看文件内容主要用法: 1.cat f1.txt,查看f1.txt文件的内容. 2.cat -n f1.txt,查看f ...