[英]How to get the pid of the process started by subprocess.run and kill it
[英]Get a PID number of a process and than kill it with Python
我使用启动omxplayer的Python代码。 它会播放歌曲,有时还会在歌曲播放过程中播放广告。 在这种情况下,有两名选手奔跑。 当omxplayer超时时,问题就来了。 超时后我无法关闭它,所以直到现在我已经习惯了
os.system("killall -9 omxplayer.bin")
仅播放一首歌曲就可以,但是在一首歌曲中结束广告并且omxplayer超时(不知道为什么,但是超时经常发生)时,此命令将杀死这两个omxplayer。 因此,如果我可以获取进程的PID(omxplayer.bin)并将其存储在python中的变量中并使用它杀死进程,那将是很好的。 但是我很感激任何可以返回给定进程的PID并从python代码中杀死它的解决方案。 到目前为止,我尝试了很多事情。 有人可以帮助我吗?
我建议使用psutil ,特别是psutil.process_iter() :
>>> # get all PIDs
>>> psutil.pids()
[0, 4, 472, 648, 756, ...]
>>> # but for iteration you should use process_iter()
>>> for proc in psutil.process_iter():
>>> try:
>>> if pinfo.name() == "omxplayer":
>>> pinfo.terminate()
>>> except psutil.NoSuchProcess:
>>> pass
正如我评论的那样,一个可能的解决方案:
import os
import signal
from subprocess import check_output
def get_pid(name):
return check_output(["pidof", name])
def main():
os.kill(get_pid(whatever_you_search), signal.SIGTERM) #or signal.SIGKILL
if __name__ == "__main__":
main()
我知道这个问题很旧,但是这是我想出来的,它适用于Java过程:
首先获取pid
def getPidByName(name):
process = check_output(["ps", "-fea"]).split('\n')
for x in range(0, len(process)):
args = process[x].split(' ')
for j in range(0, len(args)):
part = args[j]
if(name in part):
return args[2]
然后杀死它pid = getPidByName(“ user-access”)os.kill(int(pid),signal.SIGKILL)
就像@ElTête提到的那样。
对于不同的进程,您可能必须根据要杀死的进程来调整args中的返回索引。 或者只是遍历命令并杀死在其中找到该名称的位置。 这主要是因为“ pidof”在macO或Windows上不起作用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.