shell 终止运行时间超过24小时的进程(命令)$pid

w6lpcovy  于 2023-03-13  发布在  Shell
关注(0)|答案(4)|浏览(242)

无法过滤Etime,请帮助我只得到哪个进程/命令运行超过24小时。

ruarlubt

ruarlubt1#

给予这个:

ps -eo etimes,cmd | awk '{if ($1 >= 86400) print $2}'

etimes将以秒为单位返回时间,因此,您可以只使用>=所需时间
您可以将此扩展为仅搜索和终止所需的进程,例如:

kill $(ps -eo etimes,pid,cmd | awk '{if ($3 == "sleep" && $1 >= 30) print $2}')

在这种情况下,它将搜索cmdsleep,并且仅在运行时间超过30秒时才终止该进程。
要检查cmd是否以字符串开头,可以用途:

ps -eo etimes,pid,cmd | awk '{if ($3~/^sle/ && $1 >= 30) print $2}'

$3~/^sle/将检查命令是否以sle开头。
希望这能对你有所帮助或者给予你一些想法。

lymgl2op

lymgl2op2#

ps -ef

ps -ef的等价物是ps -eo uid,pid,ppid,c,stime,tty,time,cmd

etime      ELAPSED elapsed time since the process was started, in the
                     form [[DD-]hh:]mm:ss.
start      STARTED time the command started. If the process was started
                     less than 24 hours ago, the output format is
                     "HH:MM:SS", else it is "  <mm dd" (where Mmm is a
                     three-letter month name). See also lstart, bsdstart,
                     start_time, and stime.
rmbxnbpk

rmbxnbpk3#

您可以这样尝试,以了解进程运行了多长时间。

ps -o etime= -p "your_pid"

关于标志-o etime的信息,它提供经过的时间。
这将返回经过的时间
或者另一种方式是

ps -eo pid,comm,cmd,start,etime | grep -iv <your_pid>
piv4azn7

piv4azn74#

使用ps命令的etime

alp ❱ ps -e -o etime,pid
    ELAPSED   PID
   03:10:06     1
   03:10:06     2
   03:10:06     3
   03:10:06     5
   03:10:06     7
   03:10:06     8
   03:10:06     9
   03:10:06    10
   03:10:06    11

在此格式中,由于您需要24长时间,我们可以尝试(我使用03,因为我没有24长时间进程):

alp ❱ ps -e -o etime,pid | grep -P '^ +03:..:..'
   03:14:16     1
   03:14:16     2
   03:14:16     3
   03:14:16     5
   03:14:16     7
   03:14:16     8
   03:14:16     9
   03:14:16    10
   03:14:16    11

现在我们可以去掉那些时间了:

alp ❱ ps -e -o etime,pid | grep -Po '^ +03:..:..\K +\d+'
     1
     2
     3
     5
     7
     8
     9
    10
    11

并最终将此输出传递到xargs

alp ❱ ps -e -o etime,pid | grep -Po '^ +03:..:..\K +\d+' | xargs -I xxx echo xxx
1
2
3
5
7
8
9
10
11

因此,您应该在regex部分使用24:..:..,并在适当的位置使用killecho

相关问题