【问题标题】:How to kill certain process running more than 36 hours and containing certain phrasse in its command? [closed]如何杀死某些运行超过 36 小时并在其命令中包含某些短语的进程? [关闭]
【发布时间】:2016-06-27 16:27:53
【问题描述】:

在 Linux (CentOS 6) 上,如果它运行超过 36 小时,我想杀死其命令中包含“pkgacc”的进程(因此没有确切的命令,只是部分匹配)。

有一个相关问题:How do you kill all Linux processes that are older than a certain age? 但提供的任何解决方案都不适合我。

执行时:

 if [[ "$(uname)" = "Linux" ]];then killall --older-than 1h someprocessname;fi

它只是返回关于如何使用killall的killall使用页面,在其手册页中没有提到“--older-than”开关。

【问题讨论】:

标签: linux kill kill-process


【解决方案1】:

GNU coreutils 调用像timeout 这样的包装程序比事后去寻找它们要容易得多。特别是因为timeout 拥有它的进程,所以它杀死正确的进程是毫无疑问的。因此

timeout 36h pkgaccess --pkg_option --another_option package_name

因为您没有提供它们,所以我在其中编写了 pkgaccess 命令的名称和选项。此过程将运行不超过 36 小时。

【讨论】:

    【解决方案2】:

    我认为你可以做类似的事情

    ps -eo pid,cmd,etime
    

    然后您可以使用 grep 搜索您的进程来解析输出, 类似的东西:

    ps -eo pid,cmd,etime | grep pkgacc
    

    你会得到一些带有一个或多个结果的输出,输出的最后一列必须是运行进程的时间,所以再花一点点 bash 的努力 您可以检查时间是否大于 36 小时。

    #!/bin/bash
    
    FOO=$(ps -eo pid,cmd,etime | grep -m 1 pkgacc | awk '{ print $1" "$3 }'| sed -e 's/\://g')
    IFS=' ' read -r -a array <<< "$FOO"
    if [ "${array[1]}" -gt "360000" ]; then
        echo "kill the process: ${array[0]}"
    else 
        echo "process was not found or time less than 36 hours"
    fi
    

    我认为这可以解决您的部分问题, 看到我没有明确终止该进程,而只是指出 这是什么。你可以改进这个想法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-11
      • 2018-03-29
      • 2012-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多