Як я можу перезимувати запущену програму?


16

Приклад використання:

Я запускаю Chromium з відкритою парою вкладок і вирішую, що мені не потрібно отримувати доступ до програми протягом наступних 20 хвилин. Щоб заощадити час від акумулятора ноутбука, я хотів би перезимувати (заморозити) Chromium, не закриваючи додаток (повторне відкриття та повторна завантаження всіх вкладок потребує часу, який я хотів би заощадити, перезимувавши його).


1
Перевірте другу відповідь тут: stackoverflow.com/questions/2134771/… . Вся справа в тому, що хром використовує багато PID, і вони відрізняються щоразу, коли ви відкриваєте його ... але зупинка основного (той, який має оригінальний значок у менеджері процесів), здається, працює нормально.
GreggD

1
Якщо ви дбаєте лише про Chromium, а не про будь-які інші програми, ви можете використовувати розширення Chromium, призначене для управління вкладками, наприклад, OneTab або Session Buddy .
Моше Кац

Дякую, але я вважаю killallрішення насправді вишуканим. :)
orschiro

Відповіді:


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. Вам буде запропоновано увійти, тому введіть своє ім’я користувача та пароль. Потім запустіть команду, щоб розморозити додаток так само, як ви запустили його через звичайний емулятор терміналу. Після цього поверніться до робочого столу (TTY7), використовуючи Ctrl+ Alt+, F7і вам знову буде добре.


4
З тих пір, як ви почали з pgrep, ви могли продовжити зpkill
muru

1
Хоча ризик виходу з ладу програми SIGSTOPіснує, я б сказав, що він незначний. Я часто використовував його на Chromium, і не пам'ятаю, щоб це колись було причиною краху.
kasperd

Я дізнався smtg new! killall! ;-)
Fabby

8

Щоб призупинити, спробуйте: killall -SIGTSTP chromium-browser

Якщо це не спрацює, спробуйте силову версію: killall -SIGSTOP chromium-browser.

У будь-якому випадку продовжити використання killall -SIGCONT chromium-browser. Я спробував з Firefox, і це спрацювало. Однак зауважте, що якщо ви натискаєте кнопки в Chromium, поки вона призупинена, вона виконає цей матеріал, як тільки ви продовжите його виконання.


3
SIGSTOP / SIGCONT працює для мене, просто потрібно ввести chromium-browserяк ім'я процесу. +1
GreggD

1
Або google-chromeякщо ви користуєтеся Google 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, де це доречно.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.