【问题标题】:Pausing a process?暂停进程?
【发布时间】:2011-02-17 18:11:12
【问题描述】:

有没有办法暂停进程(从可执行文件运行),以便它在暂停时停止 cpu 负载,并等到它取消暂停继续工作?可能在 python 中,或者以某种方式可以被 python 访问。

【问题讨论】:

  • 你的意思是线程还是正在运行的系统进程?
  • 我倾向于降低进程优先级而不是“暂停”它。这样其他进程将首先进行

标签: python process signals


【解决方案1】:

通过使用 psutil (https://github.com/giampaolo/psutil):

>>> import psutil
>>> somepid = 1023
>>> p = psutil.Process(somepid)
>>> p.suspend()
>>> p.resume()

【讨论】:

  • 太棒了!我想我会用它!
【解决方案2】:

我刚刚用 python 中的信号实现了这一点,如下所示:

def mysignalhandler(sig, frame):
  print "Got " + str(sig)
  if sig == signal.SIGUSR1:
    do_something()

signal.signal(signal.SIGUSR1, mysignalhandler)

signal.pause()

这将在最后一行暂停并在收到信号 USR1 时调用do_something(),例如通过

kill -USR1 <pid>

命令。

这仅适用于 UNIX。

【讨论】:

    【解决方案3】:

    在 Python 中有一种(几乎)本机方法可以做到这一点,而且非常简单:

    import time
    time.sleep(5)
    

    在这个 sn-p 中,5 是您要暂停程序的

    【讨论】:

    • 这不能回答问题;这是关于暂停另一个进程。
    【解决方案4】:

    您正在考虑SIGTSTP -- 与您推送CTRL-Z 时发生的信号相同。这会暂停进程,直到它获得SIGCONT

    当然,有些程序可以捕捉并忽略这个信号,所以它取决于可执行文件。但是,如果您可以手动暂停和恢复它,您也可以从 python 程序中执行此操作。使用os.kill()

    【讨论】:

    • 我如何解除它的挂起以便它从以前的位置继续工作?
    • SIGSTOP 不能被阻止,并且在这种情况下会稍微更准确,而不是来自 tty。 en.wikipedia.org/wiki/SIGSTOP
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多