【问题标题】: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
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
我认为这可以解决您的部分问题,
看到我没有明确终止该进程,而只是指出
这是什么。你可以改进这个想法。