首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用python脚本执行和杀死shell进程

使用python脚本执行和杀死shell进程
EN

Stack Overflow用户
提问于 2014-04-18 10:12:51
回答 1查看 4.3K关注 0票数 0

我需要通过python脚本或python程序运行“myexe”可执行文件:

代码语言:javascript
复制
./myexe arg1 arg2 >& outfile

我的做法如下:

代码语言:javascript
复制
1   import os
2   import subprocess
3   import time
4   cmd = "./myexe arg1 arg2 >& outfile"
5   print 'cmd = ', cmd
6   proc = subprocess.Popen(command, shell=True)
7   # delay for 10 seconds
8   time.sleep(10)                                                       
9   # kill the process if not finished
10  os.system("ps -e | grep \"myexe\" | awk '{print $1}'")               # --- process id = x+1
11  if proc.poll() == None:
14     print 'Deliberately kill the Process= ', proc.pid                 # --- process id = x
15     proc.kill()

在这里,我注意到,当我使用io重定向时,系统命令(行号-10)打印的进程id与其他部分(行号-14)中打印的进程id不同。

如果我使用命令"./myexe arg1 arg2",那么进程id的值是正确的。那么,如何使用shell命令使用子进程,而shell命令也使用io重定向?

这里,在同一个文件中,stderr和stdout都使用重定向。

请帮助我解决这一问题,并分享实现这一目标的有效方法。另外,如果在使用某种有效的方法没有完成任意延迟之后,我如何终止(杀死)进程id-x?

除此之外,我如何才能知道进程是成功地终止了,还是发送了一个杀死信号:我正在这样做:

代码语言:javascript
复制
if proc.wait() == 0:
   print 'Terminate successfully'
else:
   print 'Terminated by kill signal'

也可以在调用proc.kill()之后设置一些标志。

它是否遵守python规则/预期使用?

注意:为了避免可能发生在myexe可执行文件中的无限循环场景,需要终止进程。输出文件由python脚本进一步读取(此处未显示)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-18 12:52:26

您的PID由于shell=True参数而不同。Python生成一个中间shell进程。

流程树如下所示:

代码语言:javascript
复制
python yourscript.py 
└─ /bin/sh -c ./myexe        # PID shown on line 14
   └─ ./myexe                # PID shown on line 10

用沿这两条线的东西替换第6行

代码语言:javascript
复制
outfile = open("outfile", "w")
proc = subprocess.Popen(["./myexe", "arg1", "arg2"],
                        stdout=outfile, stderr=outfile)

并且您的PID将匹配,而这两个流将被重定向到同一个文件(确保./myexe刷新这些流)。

如果您想使用shell,您应该参考以下问题:How to terminate a python subprocess launched with shell=True

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23151962

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档