暂停一个进程?

13 投票
4 回答
21863 浏览
提问于 2025-04-15 22:33

有没有办法让一个正在运行的程序暂停,这样它在暂停的时候就不会占用CPU的资源,等到重新启动的时候再继续工作?可以用Python实现,或者用其他Python能接触到的方法。

4 个回答

2

我刚刚用Python实现了这个功能,使用了信号,代码大概是这样的:

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

signal.signal(signal.SIGUSR1, mysignalhandler)

signal.pause()

这段代码会在最后一行暂停,当它收到USR1信号时,比如通过一个

kill -USR1 <pid>

命令,就会调用do_something()这个函数。

不过,这个方法只适用于UNIX系统哦。

7

你在想的是 SIGTSTP 信号——就是你按下 CTRL-Z 时发生的那个信号。这会暂停这个程序,直到它收到 SIGCONT 信号。

当然,有些程序可以捕捉到这个信号并选择忽略它,所以这要看具体的程序。不过,如果你可以手动暂停和恢复程序,那么你也可以通过 Python 程序来做到这一点。可以使用 os.kill()

22

通过使用 psutil 这个库(你可以在这里找到它:https://github.com/giampaolo/psutil),你可以实现很多功能。

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

撰写回答