如果运行时间超过 24 小时,则按名称终止进程

如果运行时间超过 24 小时,则按名称终止进程

我目前正在尝试终止任何已运行超过 48 小时且名为“cool-program”的程序

我知道如果我跑

ps -eo pid,cmd,comm,etime | grep -i  cool-program | grep -v grep

它给了我一个程序列表,现在我不知道如何进一步过滤它以仅显示运行超过一天的程序

给出注释让它打印出pid我正在使用的酷程序列表,但当我尝试将其传输到它时,kill它不会终止程序

ps -eo bsdstart,pid,comm | grep -i ffmpeg | grep -v '^[ 0-9]' | awk '{ print $3 }'

答案1

它的手册页ps指出如果您使用bsdstart它将显示命令启动的时间:

   bsdstart    START     time the command started.  If the process was
                         started less than 24 hours ago, the output format
                         is " HH:MM", else it is " Mmm:SS" (where Mmm is
                         the three letters of the month).  See also
                         lstart, start, start_time, and stime.

然后,您可以使用组合命令来提取日期、pid 和运行的命令,并使用 grep 排除-v以数字或空格开头然后是数字的行,如下所示:

ps -eo bsdstart,pid,cmd | grep -i cool-porgram | grep -v '^[ 0-9]'

要杀死它们,命令是:

sudo kill $(ps -eo bsdstart,pid,cmd | grep -i cool-porgram | grep -v '^[ 0-9]' | awk '{print $3}')

希望这可以帮助!

相关内容