我准备了一个shell脚本来运行Java文件。我给了Java路径,类路径和依赖项。我正在根据条件执行该文件。
以下是代码段。代码正在执行,但控件不会出现提示。
CMD=""$JRE_BIN_PATH/java" $SP -cp $CP org.aditya.test.MainClass "$@""
if [ "$1" == 'server' ] && [ "$2" == 'start' ]
then
$CMD &
elif [ "$1" == 'process' ]
then
$CMD &
else
$CMD
fi
命令在if
和elif
执行时挂起,因为它正在使用'&'在末尾。但如果控制转到其他(没有'&')控制立即出现。我删除了'&'一切正常。我的问题是,'&'有什么用?在CMD结束时。为什么会导致这个问题。
答案 0 :(得分:1)
基本上,&
是“在后台运行”的Linux shell标记。任务将立即fork然后返回。它不会访问父进程的标准输入和输出。
永远不要将&
用于需要用户输入的任务。 &
应保留用于后台任务,例如服务或独立维护任务(请注意,在标准行为下,除非使用screen
之类的工具,否则后台任务可能仍会在后台运行的父进程中终止它终止了。