linux - 在 linux bash 脚本中杀死一个 10 分钟的老僵尸进程

标签 linux bash process kill zombie-process

我一直在修改 yukondude 的正则表达式答案收效甚微。我正在尝试终止超过 10 分钟的进程。我已经知道进程 ID 是什么。我每 10 分钟循环一次数组,看看是否有任何挥之不去的 proc 存在并且需要被杀死。有人对此有任何快速的想法吗?

ps -eo uid,pid,etime 3233332 | egrep ' ([0-9]+-)?([0-9]{2}:?){3}' | awk '{print $2}' | xargs -I{} kill {}

最佳答案

就像真正的僵尸一样,僵尸进程无法被杀死——它们已经死了。

当它们的父进程调用 wait() 获取它们的退出代码时,或者当它们的父进程退出时,它们将消失。


哦,您根本不是在谈论僵尸进程。这个 bash 脚本应该符合您的要求:

ps -eo uid,pid,lstart |
    tail -n+2 |
    while read PROC_UID PROC_PID PROC_LSTART; do
        SECONDS=$[$(date +%s) - $(date -d"$PROC_LSTART" +%s)]
        if [ $PROC_UID -eq 1000 -a $SECONDS -gt 600 ]; then
            echo $PROC_PID
        fi
     done |
     xargs kill

这将终止所有运行时间超过 10 分钟(600 秒)的 UID 1000 拥有的进程。您可能想将其过滤为您感兴趣的 PID——可能是通过父进程 ID 或类似的?无论如何,这应该是继续下去的事情。

关于linux - 在 linux bash 脚本中杀死一个 10 分钟的老僵尸进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2762233/

相关文章:

linux - 在内核模块中使用 GPIO

c++ - 用于在 C 或 C++ 中解析 XML 的跨 Linux 和 Windows 的通用 XML 库是什么?

linux - 当非阻塞服务器套接字上收到新请求时,为什么进程不从 sleep() 恢复?

ruby - 运行这么多 ruby​​ 进程正常吗?

c++ - 单击两次 listWidget 项目时 Qt 崩溃

linux - 并口驱动安装失败(Debian)

linux - 如何在 unix 中解压 tar.bz 文件?

bash - 查找并打印列值重复 n 次的行

bash - 每 X 行 Sed,Y 行之间的 GREP

c# - 在没有路径位置的情况下启动.exe文件c#