Назад | Перейти на главную страницу

Когда я убиваю подпроцесс, созданный в сценарии bash, он автоматически запускается заново. Зачем?

У меня есть следующий сценарий, который я запускаю с помощью команды:

./thescript.sh 2>&1 &

и если я убью порожденный им подпроцесс, через несколько секунд он будет перезапущен. Почему это?

thescript.sh:

#!/bin/bash

#...
#other stuff
#...

while true; do
         nohup /usr/bin/php ../thing/script.php scriptargs >my_log.log 2>&1
        /bin/mail -s "$SUBJECT" "me@home.com" < $EMAILMESSAGE
done

результат

     ps -ax | grep scriptargs

дает

19624 pts/0    S      0:00 /bin/bash ./thescript.sh
19643 pts/0    S      0:00 /usr/bin/php ../thing/script.php scriptargs
19771 pts/0    S+     0:00 grep scriptargs

если я бегу

kill 19643

Я получил:

./thescript.sh: line 24: 19643 Terminated /usr/bin/php ../thing/script.php scriptargs >my_log.log 2>&1

но если затем запустить:

     ps -ax | grep scriptargs

снова получаю:

19624 pts/0    S      0:00 /bin/bash ./thescript.sh
19824 pts/0    S      0:00 /usr/bin/php ../thing/script.php scriptargs
19862 pts/0    S+     0:00 grep scriptargs

Я получаю электронное письмо - но затем он возобновляет этот процесс.

Почему это?

Это было бы из-за петли

while true; do

done

Когда процесс завершается, он завершается и разрешает отправку почты. Затем снаряд попадает в done заявление и возвращает while true что верно, поэтому он снова запускает команды внутри.