Как завершить C Shell Script при продолжении вызова - PullRequest
0 голосов
/ 27 августа 2018

Хорошо, я прошу прощения. Поиграв с процессом, убив его и запустив, похоже, я не заканчиваю сценарий должным образом.

У меня есть сценарий csh, который я запускаю для запуска Java-приложения в системе AIX.

Что я обычно делаю:

В машинописи / терминале я запускаю

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-скрипт умер.

В машинописи / терминале я запускаю

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.

1 Ответ

0 голосов
/ 07 сентября 2018

Простой, используйте 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 с тем же идентификатором процесса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...