如何在调用continue进程时结束C Shell脚本

问题描述 投票:1回答:1

好的,我道歉。通过杀死它并开始它来玩这个过程,看起来我没有正确地结束脚本。

我有一个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的孩子那样重要,我就完全不知道了。

java shell process aix csh
1个回答
0
投票

简单,使用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。

© www.soinside.com 2019 - 2024. All rights reserved.