如何hibernate正在运行的应用程序?

用例示例:

我打开Chromium并打开几个标签,然后决定在接下来的20分钟内我不需要访问该应用程序。 为了节省笔记本电脑的电池时间,我想hibernate(冻结)Chromium而不必关闭应用程序(重新打开并重新加载所有选项卡需要时间,我希望通过hibernate来节省)。

您可以使用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 + F7切换回桌面(TTY7),你应该没问题了。

要暂停,请尝试: killall -SIGTSTP chromium-browser

如果这不起作用,请尝试强有力的版本: killall -SIGSTOP chromium-browser

无论哪种方式,继续使用killall -SIGCONT chromium-browser 。 我尝试使用Firefox并且工作正常。 但请注意,如果您在Chromium中单击按钮时它会被暂停,那么一旦您继续执行它就会执行这些按钮。

您可以尝试以下(在终端中):

 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。