Я регулярно забываю добавить && shutdown -h now
в долго работающий процесс. Есть ли способ добавить shutdown -h now
командупослепервая команда была вызвана? Она не предназначена для прерывания текущего процесса. Может быть, можно посмотреть PID?
решение1
Нет необходимости повторно запускать ps для получения списка всех процессов и grep по выходным данным. Переведите процесс в фоновый режим с помощью ctrl-Z, затем запустите
bg %1 ; wait %1 ; shutdown -h now
Если у вас запущены другие фоновые задания, то при нажатии ctrl-z вам будет предоставлен другой jobspec вместо [1]. Если так, используйте его.
решение2
Я все время это делаю.
- Начните процесс.
- Пойми, я забыл выполнить
&&
команду. - Нажмите Ctrl+ Z, чтобы приостановить процесс и вернуться в оболочку.
- Бежать
fg && shutdown -h now
к:- Выведите на передний план и возобновите процесс, который вы только что остановили.
- Затем, после завершения, он запустит то, что вы хотели запустить.
В качестве альтернативы вы можете провести опрос, как предложено в других ответах, например:
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
и она сделает оба действия за вас.