【发布时间】:2015-04-07 09:33:52
【问题描述】:
下面的简化(printf/echo/cd/sleep/progressbar 命令,忽略不计) bash shell 脚本在第一次执行二进制文件后终止。为什么是这样?我可以在不修改二进制文件本身的情况下做或测试任何事情(只能在一定程度上做到这一点)?
PROGRESS=0
SIMULATIONS=30
for number in $(seq ${PROGRESS} ${SIMULATIONS})
do
echo 'INB4 TERMINATION'
nohup ./binary -someflag
# do other stuff next
echo 'NEVER GETS HERE'
done
我已经阅读了traps,但添加了这一行:
trap "echo 'trap invoked'; exit" SIGHUP SIGINT SIGTERM
- 似乎不起作用。
- 是否使用
nohup似乎并不重要。 - 没有二进制命令,循环也能正常工作。
二进制文件的作用
它运行一个 3D 机器人模拟实验(它本身分叉一次以并行运行 2 个机器人模拟器进程(使用 C/C++ system() 命令)。此外,每个机器人模拟器为 16 个机器人控制器中的每一个启动一个线程)。所以二进制是32个线程的父进程。如果这完全有道理,那有关系吗?
【问题讨论】:
-
脚本是否按预期启动二进制文件? (至少是第一次?)
-
是的,确实如此,抱歉忘记添加了。二进制文件不会抛出任何错误,并且(可能)以退出状态 0 结束。我认为我无法检查退出状态,因为我的脚本随后立即退出,或者我应该能够吗?
-
您可以尝试在调用脚本后立即添加内联
echo $?以检查退出状态:nohup ./binary -someflag; echo $?。 -
@MichaelTrouw script quits 表示会再次显示提示?
-
您正在使用 nohup 但没有在后台运行它?试试
command &。除非您计划中途退出脚本并让二进制文件运行,否则不需要nohupAlso,无论出于何种原因,您的脚本无法继续执行,看起来二进制文件从未完成。要检查二进制文件的实际完成情况,您可以使用./binary && echo finished。如果它没有在您的屏幕上打印完成,那么它没有。