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


16

用例示例:

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


1
在此处检查第二个答案:stackoverflow.com/questions/2134771/…。事实是,铬正在使用许多PID,并且每次打开它时它们都不同...但是停止主要一个(过程管理器中带有原始图标的那个)似乎运行良好。
GreggD '16

1
如果您只关心Chromium,而不关心其他任何应用程序,则可以使用专为标签管理而设计的Chromium Extension,例如OneTabSession Buddy
Moshe Katz

谢谢,但是我发现killall解决方案实际上非常优雅。:)
orschiro '16

Answers:


22

您可以使用该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,您应该会再好的一次。


4
自从开始以来pgrep,您可能会继续pkill
muru

1
尽管SIGSTOP存在应用程序崩溃的风险,但我认为这是次要的。我经常在Chromium上使用它,而且我不记得曾经是崩溃的原因。
kasperd '16

我学到了新的smtg! killall;-)
Fabby

8

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

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

无论哪种方式,都可以继续使用killall -SIGCONT chromium-browser。我尝试使用Firefox并成功。但是请注意,如果您在Chromium处于暂停状态时单击按钮,它将在您继续执行后执行该任务。


3
SIGSTOP / SIGCONT对我有用,只需要输入chromium-browser作为进程名称即可。+1
GreggD '16

1
或者,google-chrome如果你使用谷歌Chrome,因为差异显然是混淆

2

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

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。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.