如何检测Julia中的脚本是否被“杀死”?

时间:2019-08-22 18:56:54

标签: bash julia

因此,我正在名为./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一词!

如何可靠地检测脚本是否提前终止?有没有办法弄清它被杀死的原因(例如内存不足,堆栈溢出等)?

2 个答案:

答案 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。