0x01
process.py程序如下:
def worker(interval):
print os.getpid()
n = 5
while n > 0:
print("The time is {0}".format(time.ctime()))
time.sleep(interval)
n -= 1
if __name__ == "__main__":
p = multiprocessing.Process(target = worker, args = (200,))
p.start()
print os.getpid()
p.join()
#print "p.pid:", p.pid
#print "p.name:", p.name
#print "p.is_alive:", p.is_alive()
主进程启动了一个子进程,并且会答应出两个进程的进程id。
使用ps -ef | grep process.py看一下当前进程的数量,这里使用两种方式运行
- python process.py
yeruoxi 8520 8339 0 13:01 pts/2 00:00:00 python process.py
yeruoxi 8521 8520 0 13:01 pts/2 00:00:00 python process.py
- sudo python process.py
root 8653 8339 0 13:02 pts/2 00:00:00 sudo python process.py
root 8675 8653 0 13:02 pts/2 00:00:00 python process.py
root 8676 8675 0 13:02 pts/2 00:00:00 python process.py
使用sudo运行时,多了一个进程,这是为什么呢?
0x02
8653这个进程,不是python程序创建的,这个可通过程序输出的进程id知道。其实这个进程是由sudo命令产生的,sudo命令是先建立一个root用户的shell,sudo python process.py就是新建的这个shell进程,然后8675这个进程就是在这个shell上启动的python process.py的进程,8676就是process.py程序中启动的子进程。
0x03
参考:
https://www.jianshu.com/p/a393e2ba3a75
https://www.cnblogs.com/jackiesteed/articles/4269018.html
https://www.cnblogs.com/bodhitree/p/6018369.html