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

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

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

решение1

Нет необходимости повторно запускать ps для получения списка всех процессов и grep по выходным данным. Переведите процесс в фоновый режим с помощью ctrl-Z, затем запустите

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

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

решение2

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

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

В качестве альтернативы вы можете провести опрос, как предложено в других ответах, например:

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

решение3

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

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

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

решение4

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

МойShellScript.txt:

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

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

chmod +x MyShellScript.txt

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

Связанный контент