我有以下脚本,使用以下命令运行它:
./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
结果为真,因此它会再次运行其中的命令。