Python - 如何杀死进程(不是子进程)

时间:2017-05-11 18:52:36

标签: python ubuntu process multiprocessing

说我的代码类似于:

from multiprocessing import Process

def pro_a():       
    #execute some code that runs a radio program

def pro_b():
    #execute some code that keeps a GUI running

.
.
. #some code

if __name__ == '__main__':
    Process(target=pro_a).start()
    Process(target=pro_b).start()

如何在这些流程启动后结束这些流程?我已经尝试过.end(),.quit(),。telminate(),每次命令窗口都会显示' Process'对象没有属性' ...' (Linux)的

在我的特定代码中,我在某个中心频率运行GNU无线电,然后我希望我的GUI能够有一个按钮,当按下时,更新中心频率,然后关闭进程并重新启动运行它们以便使用新的中心频率。

1 个答案:

答案 0 :(得分:1)

  

评论:我需要从另一个进程

终止它

您可以使用os.kill(...执行此操作。

  

os.kill(pid,sig)
  将信号sig发送到进程pid。主机平台上可用的特定信号的常数在信号模块中定义。

例如:

os.kill(p.pid, signal.SIGTERM)
  

注意:在文档中注意kill process的警告。
  Python»3.6.1文档multiprocessing.Process.terminate

如果您以这种方式使用它,则会从.start()获得None的返回值:

if __name__ == '__main__':
    p =Process(target=pro_a).start()

你必须这样做:

if __name__ == '__main__':
    p= Process(target=pro_a)
    p.start()
    time.sleep(5)
    p.terminate()