Как добавить к уже запущенному процессу дополнительную команду «завершение работы»?

Регулярно забываю добавлять && shutdown -h now к длительному процессу. Есть ли способ добавить команду shutdown -h now после того, как была вызвана первая команда? Он не предназначен для прерывания текущего процесса. Может быть, можно посмотреть PID?

11
задан 30 January 2012 в 06:08

5 ответов

Нет никакой потребности неоднократно выполнить PS для списка всех процессов и grep через вывод. Фон процесс с ctrl-Z, затем выполненным

bg %1 ; wait %1 ; shutdown -h now

Если у Вас будет другое выполнение фоновых заданий, то Вам дадут другой jobspec вместо [1] когда Вы ctrl-z. Если так, используйте это вместо этого.

13
ответ дан 30 January 2012 в 06:08

Вы можете сделать что-то вроде этого, который будет проверять, выполняется ли процесс каждые 5 секунд, и предпринимать соответствующие действия:

while true; do
  if ps -ef | grep -q '[l]ong-running-process'; then
    sleep 5
  else
    sudo poweroff
  fi
done

Обратите внимание на квадратные скобки в выражении grep. Это делается для того, чтобы процесс grep не совпадал, если он попал в список ps. Достаточно окружить любой отдельный символ квадратными скобками.

0
ответ дан 30 January 2012 в 06:08

Создайте сценарий оболочки для запуска обоих процессов:

MyShellScript.txt:

#!/bin/sh
MyProcessIdLikeToStart -o options && shutdown -h now

После сохранения в каталоге, где вы запускаете данный процесс, выполните:

chmod +x MyShellScript.txt

Затем, когда вы захотите запустить команду, просто наберите ./MyShellScript.txt, и она сделает то и другое за вас.

0
ответ дан 30 January 2012 в 06:08

Я делаю это все время.

  1. Начать процесс.
  2. Поймите, что я забыл выполнить свою команду &&.
  3. Нажмите Ctrl + Z , чтобы приостановить процесс и вернуться в оболочку.
  4. Запустите fg && shutdown -h now, чтобы:
    1. Передний план и возобновите только что приостановленный процесс.
    2. Затем, после его завершения, он запустит то, что вы хотели запустить.

Кроме того, вы можете опросить, как предлагается в других ответах, как это:

while ps -p $PID ; do sleep 5 ; done ; shutdown -h now
0
ответ дан 30 January 2012 в 06:08

Если вы знаете PID, вы можете запустить это:

while ps -p $PID; sleep 5; done; shutdown -h now

Для запуска без эха от PS сделайте это:

while ps -p $PID >/dev/null; sleep 5; done; shutdown -h now

И, наконец, запустить его в фоновом режиме без Вывод:

(while ps -p $PID >/dev/null; sleep 5; done; shutdown -h now ) &

Решение Скотта является хорошим, но это устраняет необходимость в grep снова и снова, если вы уже знаете pid. И это гораздо быстрее набрать.: P

0
ответ дан 30 January 2012 в 06:08

Другие вопросы по тегам:

Похожие вопросы: