在外壳中执行nohup命令的时间是几点?

时间:2019-08-06 10:38:39

标签: shell

我这样写一个shell(CentOS)脚本命令:

count=`ps -ef | grep ${APP_NAME} | grep -v "grep" | wc -l`
if [[ ${count} -lt 1 ]]; then
  cd ${APP_HOME}
  nohup ${JAVA_HOME}/bin/java -Xmx256M -Xms128M -jar -Xdebug -Xrunjdwp:transport=dt_socket,suspend=n,server=y,address=5016 ${APP_HOME}/${APP_NAME} >> /dev/null &
  sleep 5
else
  echo "process aready exists!"
  exit 1
fi

我在终端中执行脚本,输出为:

++ ps -ef
++ wc -l
++ grep -v grep
++ grep soa-report-consumer-service-1.0.0-SNAPSHOT.jar
+ count=0
+ [[ 0 -lt 1 ]]
+ cd /data/jenkins/soa-report-consumer
+ sleep 15
+ nohup /opt/dabai/tools/jdk1.8.0_211/bin/java -Xmx256M -Xms128M -jar -Xdebug -Xrunjdwp:transport=dt_socket,suspend=n,server=y,address=5016 /data/jenkins/soa-report-consumer/soa-report-consumer-service-1.0.0-SNAPSHOT.jar

问题是:睡眠命令是否在nohup命令之前执行?为什么首先echo sleep命令结果?

1 个答案:

答案 0 :(得分:1)

这是因为您使用nohup&命令放在了后台。 当命令在单独的外壳程序中运行时,将其置于后台时,该命令不会立即有任何输出,并且您当前的外壳程序会立即进入sleep命令。到您从睡眠状态恢复时,nohup后台进程已返回并输出值。

如果删除&(并因此在同一shell中运行命令),则会看到顺序更改。