#linux #bash #signals
Вопрос:
Как выйти из программы с помощью bash мягким способом, и если это не удалось, сделайте это сложным способом.
- Известно, как открыть программу с помощью bash и как получить идентификатор PID программы. В следующем примере откройте исправленный редактор:
фиксированный amp; PID=$!
- Его известно, как повторить PID программы, которая была открыта:
echo $PID
12345 # пример вывода PID
- Известно, как попытаться закрыть программу мягким способом и как выбрать программу по PID для этого:
убить -15 $PID # выберите программу по PID и лотку, чтобы убить ее мягким способом
- Известно, как закрыть программу на трудном пути и как выбрать программу по PID для этого:
убить -9 $PID # выберите программу по PID и убейте ее на трудном пути
Сложи все воедино, что у меня есть, все еще чего-то не хватает:
xed amp; PID=$! # open the program xed and get the pid
echo PID of programm: $PID
sleep 5 # lets run the xed 5 seconds
kill -15 $PID # select the xed by PID and try to kill it on soft way
# check based on variant 1, 2, 3 or other, the xed was sucessfull killed on soft way or not
# if the xed still running, kill it on follow way
kill -9 $PID # select the xed by PID and kill it on hard way
Комментарии:
1. Жаль
wait
, что в сборке нет аргумента тайм-аута.2. Это может быть важно, чтобы закрыть программу жестко, после того, как она не закроется мягким способом в течение 2 или 5 секунд.
Ответ №1:
Основываясь на одном ответе Eddy763, следующий логически более подходящий вариант:
xed amp; PID=$! # Start XED and get PID
sleep 2
# kill -15 $PID # Soft Kill, activate or deactivate for testing
echo
echo
sleep 2
if ! ps -p $PID
then
echo "The PID/program are closed successful by Soft Kill"
else
echo "The PID/program didn't be killed successful by Soft Kill active, so it will be killed now on hard way"
kill -9 $PID # Hard Kill
fi
echo
echo
Ответ №2:
Вы можете получить информацию о процессе, который все еще выполняется, следующим образом:
xed amp; xedPid=$! # Start of editor XED and asking for PID
[1] 12345
kill -15 $PID
# getting the follow, if the XED was killed successfull soft before:
kill -15 $PID
bash: kill: (12345) - Kein passender Prozess gefunden
**[1] Beendet xed**
Ответ №3:
Вы можете получить информацию о процессе, который все еще выполняется или нет, также по следующему пути:
xed amp; xedPid=$! # Start of editor XED and asking for PID
[1] 12345
# Output if xed are running
kill -0 $PID
kill: Aufruf: kill [-s Signalname | -n Signalnummer | -Signalname] pid | jobspec ... oder kill -l [Signalname]
kill -15 $PID
# Output if XED are not more running:
kill -0 $PID
kill: Aufruf: kill [-s Signalname | -n Signalnummer | -Signalname] pid | jobspec ... oder kill -l [Signalname]
**[1] Beendet xed**
Ответ №4:
убить -15 $PID сна 1
если ps -p $PID > /dev/null, то убейте -9 $PID fi
Ответ №5:
#!/bin/bash
xed amp; PID=$! # Start XED and get PID
sleep 3
# kill -15 $PID # Soft Kill, activate or deactivate for testing
echo
echo
sleep 3
if ps -p $PID
then
echo "The PID/program didn't be killed successful by Soft Kill"
kill -9 $PID # Hard Kill
else
echo "PID/program are already closed by Soft Kill"
fi
echo
echo