python中使用fork创建新的进程
2016-04-12 22:10
579 查看
python中使用fork创建新的进程
http://www.01happy.com/python-fork-create-process/
python中如果要创建新进程的话,可以使用os模块中的fork方法。为了了解其中工作原理,笔者结合linux的查看进程ps命令,对这个方法做了一些测试。
python运行时进程
python一开始运行的时候,系统会生成一个新的进程。先看下面代码:
因为代码执行完后,进程就会被销毁,所以这里睡眠30秒,方便看到效果。在linux下执行这个代码:
加上&符号,可以让程序在后台运行,不会占用终端。输入ps -l命令查看进程,在电脑上输出如下:
python运行时进程
其中第二条记录就是刚才运行的python了。
使用fork来创建一个新进程
使用fork创建一个新进程成功后,新进程会是原进程的子进程,原进程称为父进程。如果发生错误,则会抛出OSError异常。
运行代码,查看进程,在电脑上输出如下:
python中fork进程
可以看出第二条python进程就是第一条的子进程。
fork进程后的程序流程
使用fork创建子进程后,子进程会复制父进程的数据信息,而后程序就分两个进程继续运行后面的程序,这也是fork(分叉)名字的含义了。在子进程内,这个方法会返回0;在父进程内,这个方法会返回子进程的编号PID。可以使用PID来区分两个进程:
上面代码中,在子进程创建前,声明了一个变量source,然后在子进程中自减1,最后打印出source的值,显然父进程打印出来的值应该为10,子进程打印出来的值应该为9。为了明显区分父进程和子进程,让子进程睡3秒,就看的比较明显了。
既然子进程是父进程创建的,那么父进程退出之后,子进程会怎么样呢?此时,子进程会被PID为1的进程接管,就是init进程了。这样子进程就不会受终端退出影响了,使用这个特性就可以创建在后台执行的程序,俗称守护进程(daemon)。
转载请注明:快乐编程 » python中使用fork创建新的进程
http://www.01happy.com/python-fork-create-process/
python中如果要创建新进程的话,可以使用os模块中的fork方法。为了了解其中工作原理,笔者结合linux的查看进程ps命令,对这个方法做了一些测试。
python运行时进程
python一开始运行的时候,系统会生成一个新的进程。先看下面代码:
python hello.py &
加上&符号,可以让程序在后台运行,不会占用终端。输入ps -l命令查看进程,在电脑上输出如下:
python运行时进程
其中第二条记录就是刚才运行的python了。
使用fork来创建一个新进程
使用fork创建一个新进程成功后,新进程会是原进程的子进程,原进程称为父进程。如果发生错误,则会抛出OSError异常。
python中fork进程
可以看出第二条python进程就是第一条的子进程。
fork进程后的程序流程
使用fork创建子进程后,子进程会复制父进程的数据信息,而后程序就分两个进程继续运行后面的程序,这也是fork(分叉)名字的含义了。在子进程内,这个方法会返回0;在父进程内,这个方法会返回子进程的编号PID。可以使用PID来区分两个进程:
#!/usr/bin/env python #coding=utf8 import os #创建子进程之前声明的变量 source = 10 try: pid = os.fork() if pid == 0: #子进程 print "this is child process." #在子进程中source自减1 source = source - 1 sleep(3) else: #父进程 print "this is parent process." print source except OSError, e: pass
上面代码中,在子进程创建前,声明了一个变量source,然后在子进程中自减1,最后打印出source的值,显然父进程打印出来的值应该为10,子进程打印出来的值应该为9。为了明显区分父进程和子进程,让子进程睡3秒,就看的比较明显了。
既然子进程是父进程创建的,那么父进程退出之后,子进程会怎么样呢?此时,子进程会被PID为1的进程接管,就是init进程了。这样子进程就不会受终端退出影响了,使用这个特性就可以创建在后台执行的程序,俗称守护进程(daemon)。
转载请注明:快乐编程 » python中使用fork创建新的进程
相关文章推荐
- Python学习笔记(六)
- Python学习笔记-偏函数
- 八大排序的python实现
- python包管理
- python科学计算基础知识
- LeetCode-two sum:python解答数组问题
- ipython 运维工具(一)
- python 基础知识四、字典
- 使用python来处理excel表《1》
- 【leetcode】sort list(python)
- truncate file python
- 0412python中文处理小记
- Python 邮件发送smtplib
- 关于Python正则re中的(.*?)
- Ubuntu下配置舒服的Python开发环境
- Python 序列化pickle/cPickle模块整理
- python main函数
- 使用python3自带工具2to3.py 转换 python2.x 代码 到python3
- Python 中的位置参数和关键字参数分析
- python解析excel