因此,我正在名为./run.sh
的bash脚本中运行Julia(v 0.6.3)脚本,如下所示:
./julia/bin/julia scripts/my_script.jl
现在,脚本会提前终止。我对此很确定,因为它并没有完成应有的所有数据输出。此后,当我运行解析脚本(用Python编写)时,由于缺少数据,该脚本将失败。
我认为它终止于RAM分配不足(我在Docker容器上运行脚本)。如果我增加分配的RAM,脚本将正常工作。
要在我的Julia脚本中捕获此错误,我执行了以下操作:
try main();
catch e
println(e)
exit(1)
end
exit(0)
最重要的是,我更新了bash脚本以检查Julia脚本是否失败:
./julia/bin/julia scripts/my_script.jl
echo "Julia script returned: $?"
if [ $? -ne 0 ]; then
echo "Julia script failed"
exit 1
fi
但是,Julia脚本未打印任何异常。此外,返回代码为0
,因此bash bash脚本也不会检测到任何错误。
如果我只是直接从终端运行脚本,则在输出的最后有单词Killed
。我运行命令echo $?
后立即得到137
,这绝对不是成功的返回状态。所以看来Julia和bash都知道脚本已终止,但是如果我从bash脚本中运行Julia脚本就不知道了吗?
另一个奇怪的事情是,当我从bash脚本运行Julia脚本时,根本没有出现Killed
一词!
如何可靠地检测脚本是否提前终止?有没有办法弄清它被杀死的原因(例如内存不足,堆栈溢出等)?
答案 0 :(得分:1)
您的代码if [ $? -ne 0 ]; then
检查echo
是否成功完成之前(请参见Cyrus的评论)。
有时候将返回值放在变量中是很有意义的:
./julia/bin/julia scripts/my_script.jl
retval=$?
if [ $retval -ne 0 ]; then
echo "Julia script failed with $retval"
exit $retval
fi
答案 1 :(得分:0)
ps:报告当前正在运行的进程状态的快照。
ps -ef | grep 'julia'
T。