java - 如何在调用继续进程时结束 C Shell 脚本

标签 java shell process aix csh

好的,我道歉。通过终止并启动它来玩弄该进程,看起来我没有正确结束脚本。

我有一个csh我运行该脚本来在 AIX 系统上启动 java 应用程序。

我通常做什么:

在 typescript /终端中运行

startApp.csh >> ../log/app.log &

但是我遇到了一个问题,其中 startApp.csh java应用程序启动后不会停止。它在后台显示如下: /bin/csh startApp.csh 沿着java进程$JRE_HOME/bin/java -XMS16M -Xmx512M \-Set \-all \-necessary \-environments $argv[*] 。他们现在都相互依赖才能继续奔跑。如果我杀了/bin/csh startApp.csh java应用程序不会因我的端口调用而停止,除非我执行 kill -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 脚本终止的方法。

在 typescript /终端中运行

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 &将忽略父进程已结束的事实,并将带我返回 typescript /终端以进行下一个输入。

我只是不太清楚该进程作为 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 进程被“替换”为具有相同进程 ID 的 Java 进程。

关于java - 如何在调用继续进程时结束 C Shell 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52043941/

相关文章:

java - 无法解析符号 'search'

java - Apache Camel 休息服务

linux - Bash While 循环新参数

.net - 是否可以在 .net 中捕获/重定向我未启动的进程的标准输出?

c# - 如何从 C# 分析内存和 CPU 使用情况

java - 配置 Jetty 集群共享 web Session

面向不同地域用户的日期操作/存储的 Java 最佳实践

matlab - 使用 mkfifo 打开的命名管道应该关闭吗?如何关闭?

shell - 狂欢 : Search for specific special character in string

objective-c - 如何获取 Mac 上所有正在运行的进程的列表?