Як вимкнути комп’ютер після завершення завдання?


25

Зазвичай я запускаю завантаження перед початком школи.
Яку команду я повинен використовувати для автоматичного здійснення необхідних збережень та вимкнення комп'ютера після того, як певна задача виконана?
(Скажімо, після встановлення оновлень або після завантаження великого файлу.)

Я також переклав публікацію на askubuntu .

Відповіді:


25

Це залежить від того, що ви розпочали завдання. Якщо це якийсь інструмент командного рядка, ви можете просто запустити haltабо shutdown -h now:

  1. wget http://..../somelargefile; halt- haltбуде виконано післяwget

  2. wget http://..../somelargefile && halt- haltбуде виконано, якщо wgetповернення не буде помилок

  3. wget http://..../somelargefile || halt- haltбуде виконано, якщо wgetпомилки повернення

Альтернативою для цього є використання kshutdown- у цьому додатку ви можете вказати, які дії потрібно зробити (перезавантажити / вимкнути / сплячку / тощо чи виконання команд) та коли (через деякий час або коли інша програма закривається). Якщо ви хочете скористатися цим інструментом, вам потрібно вибрати правильний процес - деякі утиліти оновлення запускають кілька підпроцесів.

KShutdown


4
Ви також можете дати shutdownчас почекати; не потрібно використовувати kshutdown для цієї мети.
Каскабель

1
Ні, але shutdownнемає жодного способу очікування фактичної події.
Шадур

18

Кожен процес має каталог, названий відповідно до його ідентифікатора процесу (pid) у procфайловій системі. Тому ви можете дочекатися закінчення певного процесу, перевіривши, чи існує його каталог багаторазово.

Ви можете використовувати це для відключення системи після завершення процесу, як це (замініть 2296 на pid, щоб почекати):

su -c 'while [[ -d /proc/2296 ]]; do sleep 1; done; poweroff'

Переваги:

  • Ви можете вирішити, чи слід відключатись після встановлення команди оболонки
  • Відключення видається як корінь, команда чекати не обов'язково виконується як root (не потрібно sudoобходити запит із запізненням -password).

Недоліки:

  • Може статися, що ваш процес припиняється, а ОС потім повторно використовує той самий pid для нещодавно породженого процесу протягом цієї секунди (стан гонки). Таким чином, ви продовжуєте чекати завершення цього нового процесу.

2
Основний момент: Це працює, навіть якщо процес розпочався.
Гейзенберг

Якщо ви щось запустили з терміналу, який у вас все ще відкритий psв цьому ж терміналі, це допоможе вам виявити PID для CMD. Якщо процес був / знаходиться в іншому терміналі, трубопровід виводу ps для всього через grep для фільтра для вашої команди, повинен допомогти вам його знайтиps -elf | grep <command_related_word>
TafT

Краще перевірити мою відповідь на основі pgrepака процесу Grep ...
Жиль Quenot

Як я можу поставити цю команду на другий план?
DerWeh

1
@DerWeh Wrap це в сценарій оболонки і дотримуйтесь інструкцій тут: stackoverflow.com/q/625409/1025391
moooeeeep

3

Ви можете використовувати оператори &&та ||оператори для об'єднання команд разом. Наприклад:

apt-get update && sleep 2 && init 0

який буде виконувати оновлення системи за допомогою придатності, зачекайте 2 секунди та перейдіть до рівня 0, залежно від вашої системи, це може або не може фактично вимкнути обладнання.

Щоб поговорити з однією чи кількома операціями після більш довільної операції, наприклад, веб-браузера, імовірно, для завантаження, вам знадобиться додаткова логіка для перегляду завантажувального файлу, щоб перевірити, чи завантаження фактично завершено, однак логіка оболонки не змінюється.


3

Якщо ви хочете контролювати вже запущений процес, ви можете зробити це в :

# while pgrep &>/dev/null -f process_name; do sleep 60; done; shutdown -h now

1

Існує програма, названа дозорною, яка може зробити це для вас за допомогою свого GUI: дозорна

для його встановлення:

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