gpt4 book ai didi

linux - 从 shell 中避免僵尸进程?

转载 作者:太空狗 更新时间:2023-10-29 11:34:21 24 4
gpt4 key购买 nike

我正在编写几个 shell 脚本来做一些事情:

  1. ma​​in.sh 在屏幕下运行,设置一些变量,然后在前台调用:start.sh(没有&)

  2. start.sh 运行,它设置一些 Java 特定变量,并启动一个 Java 进程(再次在前台 )

  3. Java 运行并执行其操作,直到收到“退出”命令。 (也在前景

    所以我的进程树看起来像:

  - main.sh    \- start.sh      \- java

问题是 Java 程序偶尔会进入一种奇怪的状态,它不遵守您的“退出”命令,而是坐在那里愉快地做它的事情。我一直在将这个 Java 进程的进程 ID 保存到一个 PID 文件,并向这些 Java 进程发送 -STOP(17?) -TERM(15) 和 KILL(9) 信号,但似乎没有什么可以正确地杀死它们。

我可以 kill -9 'start.sh' 进程,它确实会杀死进程树,但会使 Java 进程处于可怕的已失效(僵尸)状态,唯一的解决方案是重新启动服务器。

我想知道是否有人对我如何避免陷入这些情况有任何意见,或者我是否缺少任何可能阻止这些僵尸进程发生的 Linux/shell 功能。我还应该补充一点,我不能修改 Java 应用程序代码,因为它是专有应用程序,而且我没有可用的源代码。

这在 Fedora 14 上运行,内核为 2.6.35.13-92.fc14.x86_64。

提前致谢

最佳答案

僵尸已经死了。如果你想让它们在原地休息,你的 parent (main.sh/start.sh)必须wait/waitpid 吧。

关于linux - 从 shell 中避免僵尸进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6605837/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com