Я пишу пару сценариев оболочки, которые делают несколько вещей:
- main.sh запускается под экраном, устанавливает некоторые переменные, затем вызывает: start.sh на переднем плане (нет &)
- start.sh запущен, он устанавливает некоторые специфические для Java переменные и запускает процесс Java (снова на переднем плане )
Java работает и работает до тех пор, пока не получит команду 'quit'. (также на переднем плане
Итак, моё дерево процессов выглядит так:
- main.sh
\- start.sh
\- java
Проблема в том, что иногда Java-программа попадает в причудливое состояние, когда она не соблюдает вашу команду 'quit' и сидит там, весело выполняя свою работу. Я сохранял ID процесса этого Java-процесса в файл PID и отправлял сигналы -STOP (17?) -TERM (15) и KILL (9) этим процессам Java, но, похоже, ничто не может их уничтожить.
Я могу убить -9 процесса 'start.sh', который уничтожает дерево процессов, но оставляет процесс Java в состоянии ужасного несуществующего (зомби), к которому единственным решением является перезагрузка сервера.
Мне было интересно, есть ли у кого-нибудь какие-либо сведения о том, как я могу избежать попадания в такие ситуации, или есть ли какая-то функция Linux / оболочки, которой я пропускаю, которая может помешать этим процессам-зомби. Я также должен добавить, что я не могу изменить код приложения Java, поскольку это частное приложение, и у меня нет доступного исходного кода.
Это работает на Fedora 14 с ядром 2.6.35.13-92.fc14.x86_64.
Заранее спасибо,