os模块
-
os
模块提供大量和系统相关的功能函数接口
-
os
模块的使用时系统相关的,在不同的系统中,可能使用方法不同
os.fork()
- 平台:只能在linux和unix下使用
- 功能:创建一个新的进程
- 参数:无
- 返回值:
-
< 0
表示进程创建失败
-
== 0
在子进程中fork的返回值为0
-
> 0
在父进程中fork的返回值大于0,返回新的进程的PID号
import os
# 创建新进程
pid = os.fork()
if pid < 0:
print('Create process failed.')
elif pid == 0:
print('This is the new process.')
else:
print('This is the parent process.')
print('The porcess end.')
注意点
- 子进程会复制父进程全部代码段,包括fork之前产生的内存空间
- 子进程从fork的下一句开始执行,与父进程互不干扰,理论上不一定谁先执行
- 父子进程的执行顺序是不一定的,父子进程公用一个终端显示
- 父子进程通常会根据fork返回值得差异选择执行不同的代码。所以if结构几乎是fork的固定搭配
- 父子进程空间独立,操作的都是本空间的内容,互不影响
- 子进程也有自己的特性,比如PID号,PCB,命令集等
- 子进程的退出不会影响父进程。
- 子进程不会执行
fork
语句,会从fork
的下一句开始执行,当父进程执行到fork
语句时,系统会记录当前的位置,即文件偏移量,子进程从当前的位置开始执行,而fork
的下一句并非if
语句,而是把fork
的返回值赋值给pid
的赋值语句。
import os
# 创建新进程
pid = os.fork()
a = 10
if pid < 0:
print('Create process failed.')
elif pid == 0:
print('pid =',pid) # 0
print('This is the new process.')
print(a) # 10
a = 1000 # 子进程中修改a的值,不会影响父进程a的值
else:
# 父进程中的PID为子进程的PID号。
print('Parent pid =',pid)
print('This is the parent process.')
print('The porcess end.')
print(a) # 父进程 a = 10,子进程 a = 1000
进程相关函数
-
os.getpid()
获取当前进程的PID号
-
os.getppid()
获取当前进程父进程的PID号
-
os._exit(status)
结束一个进程
一个数字表示进程的退出状态,通常0表示正常退出进程,其他数字表示非正常退出
-
sys.exit([status])
结束一个进程,如果处理了抛出的异常则不结束进程
- 一个数字表示进程的退出状态,默认为0,还可以是一个字符串,则在进程退出时会打印这个字符串
- 可以通过捕获
SystemExit
异常阻止退出
网友评论