【问题标题】:is there a way to start/stop linux processes with python?有没有办法用 python 启动/停止 linux 进程?
【发布时间】:2009-09-04 12:38:06
【问题描述】:

我希望能够启动一个进程,然后能够杀死它

【问题讨论】:

    标签: python linux


    【解决方案1】:

    这是一个小python脚本,它启动一个进程,检查它是否正在运行,等待一段时间,杀死它,等待它终止,然后再次检查。它使用'kill'命令。 python subprocess 2.6 版本有一个 kill 功能。这是在 2.5 上写的。

    import subprocess
    import time
    
    proc = subprocess.Popen(["sleep", "60"], shell=False)
    print 'poll =', proc.poll(), '("None" means process not terminated yet)'
    time.sleep(3)
    subprocess.call(["kill", "-9", "%d" % proc.pid])
    proc.wait()
    print 'poll =', proc.poll()
    

    定时输出显示它在大约 3 秒后终止,而不是调用 sleep 所暗示的 60 秒。

    $ time python prockill.py 
    poll = None ("None" means process not terminated yet)
    poll = -9
    
    real    0m3.082s
    user    0m0.055s
    sys 0m0.029s
    

    【讨论】:

    • 可以使用os.kill(..)杀死进程
    • 甚至 proc.terminate()proc.kill() 自 python 2.6 起
    【解决方案2】:

    看看subprocess 模块。 您还可以通过 os 模块使用像 fork() 这样的低级原语。

    【讨论】:

      【解决方案3】:
      【解决方案4】:

      一个使用子进程模块的简单函数:

      def CMD(cmd) :
          p = subprocess.Popen(cmd, shell=True,
                               stdin=subprocess.PIPE,
                               stdout=subprocess.PIPE,
                               stderr=subprocess.PIPE,
                               close_fds=False)
          return (p.stdin, p.stdout, p.stderr)
      

      【讨论】:

        【解决方案5】:

        请参阅文档了解原始 fork() 和模块 subprocessmultiprocessingmultithreading

        【讨论】:

          【解决方案6】:

          如果你完全需要与子进程交互,我推荐 pexpect 模块(link text)。您可以向进程发送输入,接收(或“预期”)输出作为回报,并且您可以关闭进程(使用 force=True 发送 SIGKILL)。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2023-04-01
            • 1970-01-01
            • 1970-01-01
            • 2021-10-25
            • 1970-01-01
            • 2021-08-15
            • 2013-12-25
            • 2021-09-05
            相关资源
            最近更新 更多