我有一个csh
脚本,我运行在AIX系统上启动一个Java应用程序。
我通常做的事情:
在打字稿/终端我跑
startApp.csh >> ../log/app.log &
但我遇到的问题是,在java应用程序启动后startApp.csh
不会停止。它出现在后台像:/bin/csh startApp.csh
沿着java进程$JRE_HOME/bin/java -XMS16M -Xmx512M \-Set \-all \-necessary \-environments $argv[*]
。他们现在都依赖彼此继续运行。如果我杀了/bin/csh startApp.csh
,java应用程序不会停止我的端口调用,除非我做akill -9
startApp.csh
#!/bin/csh
setenv JAR_HOME /to/directory/
setenv JAVA_HOME /to/directory/
setenv JRE_HOME /to/directory/
set CLASSPATH="${CLASSPATH}:$to/path"
$JRE_HOME/bin/java -XMS16M -Xmx512M \-Set \-all \-necessary \-environments $argv[*]
我不知道如何在java应用程序运行时告诉我的脚本结束。我怎样才能做到这一点?
更新:
到目前为止,我已经尝试过让java子进程独立运行并让父shell脚本死掉。
在打字稿/终端我跑
startApp.csh >> ../log/app.log
#!/bin/csh
setenv JAR_HOME /to/directory/
setenv JAVA_HOME /to/directory/
setenv JRE_HOME /to/directory/
set CLASSPATH="${CLASSPATH}:$to/path"
nohup $JRE_HOME/bin/java ... $argv[*] &
nohup command &
将忽略父母已经结束的事实,并将我带回我的打字稿/终端以进行下一次输入。
如果这个过程像PPID为1的孩子那样重要,我就完全不知道了。
简单,使用exec
:
#!/bin/csh
setenv JAR_HOME /to/directory/
setenv JAVA_HOME /to/directory/
setenv JRE_HOME /to/directory/
set CLASSPATH="${CLASSPATH}:$to/path"
exec $JRE_HOME/bin/java -XMS16M -Xmx512M \-Set \-all \-necessary \-environments $argv[*]
如果没有exec
,csh假定它需要作为一个进程保持并等待java进程结束,然后它将执行csh脚本中的下一行。在你的情况下,没有下一行,所以它结束。
使用exec
,csh进程与Java进程“替换”,具有相同的进程ID。