为啥shell脚本exit后,当前进程没有终止?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为啥shell脚本exit后,当前进程没有终止?相关的知识,希望对你有一定的参考价值。

在java代码里面调用shell脚本(shell脚本里面有exit语句),通过ps -f | grep 脚本.sh,来查询脚本进程,发现没有终止掉,这时什么原因?

按我的理解,shell脚本执行了exit语句后,其进程应该也会终止的

没有看到你的code,但你的理解没错的,shell 执行exit 会自己退出的。

不成功估计有两个原因:

    java 调用shell是否直接跑到后台?有没有设置抓到shell返回值再继续跑?

    shell 中exit command没有执行成功,这个细心要debug了。

参考技术A 把脚本贴出来看下,难道是死循环?所以跳不出来?看看就晓得了

exit命令

exit命令同于退出shell,并返回给定值。在shell脚本中可以终止当前脚本执行。执行exit可使shell以指定的状态值退出。若不设置状态值参数,则shell以预设值退出。状态值0代表执行成功,其他值代表执行失败。

语法
exit(参数)
参数
返回值:指定shell返回值。

实例
退出当前shell:

[[email protected] ~]# exit
logout
在脚本中,进入脚本所在目录,否则退出:

cd $(dirname $0) || exit 1
在脚本中,判断参数数量,不匹配就打印使用方式,退出:

if [ "$#" -ne "2" ]; then
echo "usage: $0 <area> <hours>"
exit 2
fi
在脚本中,退出时删除临时文件:

trap "rm -f tmpfile; echo Bye." EXIT
检查上一命令的退出码:

./mycommand.sh
EXCODE=$?
if [ "$EXCODE" == "0" ]; then
echo "O.K"
fi

以上是关于为啥shell脚本exit后,当前进程没有终止?的主要内容,如果未能解决你的问题,请参考以下文章

shell脚本中exit命令

exit命令

linux终止程序与用户切换

Linux命令行下如何终止当前程序?

exit 命令

shell:为啥循环内调用脚本,遇到exit会退出循环?