获取进程的PID编号,然后使用Python将其删除

时间:2016-05-20 11:00:42

标签: python linux raspberry-pi

我使用启动omxplayer的Python代码。它播放歌曲,有时在歌曲中播放广告。在这种情况下,两名球员跑。当omxplayer超时时出现问题。超时后我无法关闭它,所以到现在为止我已经使用了

os.system("killall -9 omxplayer.bin")

当只播放一首歌时没关系,但是当歌曲中的广告结束且omxplayer超时(不知道为什么,但经常发生超时)时,此命令会杀死两个omxplayers。因此,如果我可以将进程的PID(omxplayer.bin)存储在python中的变量中并使用它来终止进程,那将会很棒。但我会感谢任何可以返回给定进程的PID而不是从python代码中删除它的解决方案。到目前为止我尝试了很多东西。有谁可以帮我这个?

3 个答案:

答案 0 :(得分:1)

我建议使用psutil,特别是psutil.process_iter()

success: function(result) {
    //result is json format
    var $tr = $('<tr/>');
    $tr.append($('<td/>').html(result.itemname));
    $tr.append($('<td/>').html(result.qty));
    $tr.append($('<td/>').html(result.prices));
    $('.list-order tr:last').before($tr);
}

答案 1 :(得分:1)

一个可能的解决方案,正如我评论的那样:

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()

答案 2 :(得分:0)

我知道这个问题已经过时了,但这是我出来的,它适用于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(“用户访问”) os.kill(int(pid),signal.SIGKILL)

正如@ElTête所说。

对于不同的进程,您可能需要调整args中的返回索引,具体取决于您尝试杀死的进程。或者只是遍历命令并杀死您发现名称的位置。这主要是因为“pidof”不适用于macOs或windows。