Я запускаю свое приложение, запустив множество процессов, я использую сценарий (bash) для его запуска.
- Имя файла:
start.sh
, и я используюsudo ./start.sh
для запуска - Сценарий в
start.sh
:
#!/bin/sh
sudo p1 > p1.txt && p2 > p2.txt && p3 > p3.txt
Чтобы остановить свое приложение, я использую ctrl-c
, но не все процессы останавливаются. Я знаю, что смогу найти с помощью ps aux | less | grep ...
, это кажется долгим, и я хочу знать, есть ли и легкое ожидание, чтобы остановить мои процессы.
обновить извините, это вместо этого (только один & )
sudo f1/p1.py > logs/p1.txt & sudo f2/p2.sh > logs/p2.txt & sudo nodemon f3/p3.js > logs/p3.txt
3 ответа
Сохраните PID и установите ловушку для их уничтожения при получении сигнала или при выходе:
#!/bin/bash
# ^^^^ - NOT /bin/sh, as this code uses arrays
pids=( )
# define cleanup function
cleanup() {
for pid in "${pids[@]}"; do
kill -0 "$pid" && kill "$pid" # kill process only if it's still running
done
}
# and set that function to run before we exit, or specifically when we get a SIGTERM
trap cleanup EXIT TERM
sudo f1/p1.py > logs/p1.txt & pids+=( "$!" )
sudo f2/p2.sh > logs/p2.txt & pids+=( "$!" )
sudo nodemon f3/p3.js > logs/p3.txt & pids+=( "$!" )
wait # sleep until all background processes have exited, or a trap fires
Если вы знаете имя процесса, который запускаете в своем скрипте, вы можете сделать что-то вроде этого, что убьет все процессы с этим именем.
Пример: убить процесс скайпа
pkill skype
Для получения более подробной информации см. man pkill
.
Если вы знаете PID своей оболочки (идентификатор процесса), вы можете:
pkill -TERM -P PPID
Если вы знаете PID своей оболочки (идентификатор процесса), вы можете:…
Похожие вопросы
Новые вопросы
linux
ВНИМАНИЕ: Все вопросы по Linux должны быть связаны с программированием; те, которые не будут закрыты. Используйте этот тег, только если ваш вопрос касается программирования с использованием API-интерфейсов Linux или поведения, специфичного для Linux, а не только потому, что вы запускаете свой код в Linux. Если вам нужна поддержка Linux, вы можете попробовать https://unix.stackexchange.com или сайт Stack Exchange конкретного дистрибутива Linux, например https://askubuntu.com или https://elementaryos.stackexchange.com/.