无法过滤Etime,请帮助我获取运行超过24小时的哪个进程/命令。
答案 0 :(得分:0)
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.
答案 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:..:..
并使用kill
或echo