Відповіді:
Немає необхідності багаторазово запускати ps, щоб перелічити всі процеси та проглядати результат. Виділіть процес ctrl-Z, а потім запустіть
bg %1 ; wait %1 ; shutdown -h now
Якщо у вас запущені інші фонові завдання, тоді вам буде надано інший taskpec замість [1], коли ви будете ctrl-z. Якщо так, використовуйте це замість цього.
Ви можете зробити щось подібне, яке перевірить, чи працює процес кожні 5 секунд, і вжити відповідних дій:
while true; do
if ps -ef | grep -q '[l]ong-running-process'; then
sleep 5
else
sudo poweroff
fi
done
Зауважте у grep
виразі квадратні дужки . Це потрібно для того, щоб grep
процес не відповідав, якщо він опинився в ps
списку. Будь-якого окремого символу квадратними дужками достатньо.
Я роблю це постійно.
&&
команду.fg && shutdown -h now
до:
Крім того, ви можете опитувати, як пропонується в інших відповідях, таких як ця:
while ps -p $PID ; do sleep 5 ; done ; shutdown -h now
Якщо ви знаєте 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
Складіть скрипт оболонки для запуску обох процесів:
MyShellScript.txt:
#!/bin/sh
MyProcessIdLikeToStart -o options && shutdown -h now
Збереживши це в каталозі, де ви запускаєте даний процес, зробіть:
chmod +x MyShellScript.txt
Потім, коли ви хочете запустити команду, просто введіть, ./MyShellScript.txt
і вона зробить і те, і інше.
&&
цього, запуститься лише в тому випадку, якщо попередня команда була успішною. Якщо ви хочете, щоб він запускався, навіть якщо команда;
замість цього не використовується .