杀死运行时间超过24小时$ pid的进程(命令)

时间:2017-09-13 07:55:38

标签: shell

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

4 个答案:

答案 0 :(得分:0)

ps -ef

相当于ps -efps -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.

答案 1 :(得分:0)

您可以尝试这样来了解该过程的运行时间。

ps -o etime= -p "your_pid"

有关标志-o etime的信息,它提供了经过的时间。

这将返回经过的时间

或其他方式

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

答案 2 :(得分:0)

尝试一下:

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}')

在这种情况下,它会搜索cmd 睡眠,并且只有在运行超过30秒的情况下才会终止它。

要检查cmd是否以字符串开头,您可以使用:

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

$3~/^sle/将检查该命令是否以sle开头。

希望这可以帮助您或给您一些想法。

答案 3 :(得分:0)

使用etime ps命令

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

因此,您应该在正则表达式部分中使用24:..:..并使用killecho