os.exec**与os.system的区别

        对于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并不相同。
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值