![如何使正在运行的应用程序休眠?](https://linux22.com/image/1135212/%E5%A6%82%E4%BD%95%E4%BD%BF%E6%AD%A3%E5%9C%A8%E8%BF%90%E8%A1%8C%E7%9A%84%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E4%BC%91%E7%9C%A0%EF%BC%9F.png)
用例示例:
我运行 Chromium 时打开了几个选项卡,然后决定接下来的 20 分钟内不需要访问该应用程序。为了节省笔记本电脑的电池使用时间,我想休眠(冻结)Chromium 而不关闭该应用程序(重新打开并重新加载所有选项卡需要时间,我想通过休眠来节省这些时间)。
答案1
您可以使用该killall
命令向所有与给定名称匹配的进程发送SIGSTOP
信号以冻结它们,然后以SIGCONT
相同的方式发送以再次解冻它们。
首先使用以下命令找出进程名称pgrep -l SEARCH_PATTERN
:
$ pgrep -l chrom
13010 chromium-browse
13036 chromium-browse
13038 chromium-browse
13153 chromium-browse
13166 chromium-browse
13169 chromium-browse
13175 chromium-browse
13187 chromium-browse
13195 chromium-browse
13206 chromium-browse
请注意,它会截断较长的名称,因此会r
丢失。但这不是问题,因为您可以使用Tab补全功能输入进程名称,它会自动补全。
SIGSTOP
然后向所有进程发送信号,名字chromium-browser
如下:
$ killall -s STOP chromium-browser
Chromium 窗口会变灰,好像它没有响应一样。好吧,它确实没有响应了,所以这是意料之中的。现在您无法以任何方式与窗口交互(菜单栏和最小化等除外,这些操作由窗口管理器而不是应用程序本身处理)。但是,单击按钮等事件仍会生成并添加到应用程序的事件队列中,因此当您再次解冻应用程序时,它们将全部被处理!
只需运行此命令SIGCONT
向指定进程发送信号即可再次解冻应用程序:
$ killall -s CONT chromium-browser
有时以这种方式冻结应用程序可能会导致其崩溃,因此请确保在冻结应用程序之前保存了重要内容。
在极少数情况下,甚至桌面环境/窗口管理器/其他程序也可能变得无响应。在这种情况下,您必须通过 TTY 解冻冻结的应用程序:
按Ctrl+ Alt+F1切换到 TTY1。系统会要求您登录,因此请输入您的用户名和密码。然后运行命令以解冻应用程序,就像通过普通终端仿真器运行它一样。之后使用Ctrl+ Alt+切换回桌面 (TTY7) F7,您应该会再次一切正常。
答案2
要暂停,请尝试:
killall -SIGTSTP chromium-browser
如果这不起作用,请尝试强制版本:killall -SIGSTOP chromium-browser
。
无论如何,要继续使用killall -SIGCONT chromium-browser
。我尝试使用 Firefox,它成功了。但请注意,如果您在 Chromium 暂停时单击其中的按钮,它将在您继续执行时执行这些内容。
答案3
您可以尝试以下操作(在终端中):
ps aux | grep gedit
然后你会看到类似这样的内容:
barend 7166 5.3 1.0 722620 39044 ? Sl 16:19 0:00 gedit
写下数字 7166(或任何数字),然后执行以下操作:
kill -STOP 7166
这将暂停进程的执行。它不会立即释放其使用的内存,但如果其他进程需要,这些内存将可供使用。
然后做
kill -CONT 7166
再次使用该程序。
请注意,您必须在适当的地方更改 7166。