当我终止在 Bash 脚本中创建的子进程时,它会自动重新启动。为什么?

当我终止在 Bash 脚本中创建的子进程时,它会自动重新启动。为什么?

我有以下脚本,使用以下命令运行它:

./thescript.sh 2>&1 &

如果我终止由它产生的子进程,几秒钟后它就会重新启动。这是为什么?

脚本.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" "[email protected]" < $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

我收到了电子邮件 - 但是它又重新启动了该进程。

为什么是这样?

答案1

这是因为循环

while true; do

done

当进程被终止时,它会退出并允许发送邮件。然后,shell 会命中该done语句并循环返回,while true结果为真,因此它会再次运行其中的命令。

相关内容