Как убить программу жестким способом, только если она отказывается завершаться мягким способом?

#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