最后执行的命令的 PID 未被导出或保存

最后执行的命令的 PID 未被导出或保存

我正在通过命令行启动java进程:java ....我们就这样称呼它吧JAVA_COMMAND。我正在尝试在后台使用启动脚本运行此 java 命令,然后将 PID 保存到变量中,以便我可以创建一个终止进程的停止脚本:

my_app_start.sh:

 #!/bin/bash

 directory=$HOME/apps/myApp/files
 current_date=$(date +"%Y-%m-%d-%T")
 log_path="$HOME/apps/myApp/logs"
 log_file="$log_path/app_output_$current_date"
 err_file="$log_path/app_error_$current_date"

 nohup JAVA_COMMAND > $log_file & export MY_APP_PID=$!

然后我获取脚本,例如:

start.sh:

source ./my_app_start.sh

然而,当我检查它时MY_APP_PIDecho $MY_APP_PID是空的。当我编辑my_app_start.sh为:

 #!/bin/bash

 directory=$HOME/apps/myApp/files
 current_date=$(date +"%Y-%m-%d-%T")
 log_path="$HOME/apps/myApp/logs"
 log_file="$log_path/app_output_$current_date"
 err_file="$log_path/app_error_$current_date"

 nohup JAVA_COMMAND > $log_file & MY_APP_PID=$! & echo $MY_APP_PID

它也是空的,但是如果我直接echo $!输出进程 PID。

为什么会发生这种情况?为什么导出的变量为空?

相关内容