对于os.exec**(path, args) 在执行它的时候,使用的是当前进程,也就是系统不会为括号中执行的程序重新分配进程, 不返回执行结果
对于os.system(cmd) 相当于在命令行直接输入该语句,会返回执行结果,但是系统会自动为它所执行的程序分配进程
代码demo
import os
from multiprocessing import Process
def run1(filepath):
os.system(filepath)
def run2(filepath):
filename = os.path.basename(path)
os.execl(filepath,filename)
def go1():
path="/usr/local/share/firefox/firefox"
p1=Process(target=run1,args=(path,))
p1.start()
time.sleep(1)
p1.terminate()
def go2():
path="/usr/local/share/firefox/firefox"
p2=Process(target=run2,args=(path,))
p2.start()
time.sleep(1)
p2.terminate()
执行go1(), 会发现无法终结firefox, 因为p1指向的是执行run1的进程,执行os.system以后系统为firefox重新分配进程,并不是指向firefox的进程
执行go2(),会发现可以终结firefox, 因为p2指向的是执行run2的进程,系统没有重新分配进程,所以firefox的进程也和p2的相同
可以比较print p1.pid和在命令行中看看firefox的进程id($ ps -ef |grep firefox),你会发现两个进程id并不相同。