命令查找运行超过10分钟的所有作业

时间:2016-02-22 15:52:53

标签: python bash

我想运行一个脚本,该脚本将重新启动已运行超过10分钟CPU的所有正在运行的作业。任何建议如何做到这一点。所以,我想这将涉及列出运行超过10分钟的所有作业,然后发出命令

for i in pidlist 
   do 
     renice $i
done

但是如何获得pidlist?

谢谢!

编辑:我正在尝试以下root:

ps  -e -o pid,uid,nice,cputime= | awk '{gsub(/:/, "", $4); if (($1 > 1024) && ($2 >= 1000) && ($4 > 10) && ($3 <= 0)) print}' 

我得到以下列表:

1679 1000 0 230641

但是,如果没有条件,这就是我得到的:

ps  -e -o pid,uid,nice,cputime= | awk '{gsub(/:/, "", $4); if (($2 >= 1000) && ($4 > 0) && ($3 <= 0)) print}'

我得到了:

  1499 1000 0 000000
1501 1000 0 000000
1504 1000 0 000015
1529 1001 0 002238
1531 1000 0 000000
1532 1000 0 000000
1603 1000 0 000000
1607 1000 0 000000
1653 1000 0 000001
1667 1000 0 000000
1669 1000 0 000001
1672 1000 0 003817
1673 1000 0 000004
1675 1000 0 000000
1677 1000 0 000000
1678 1000 0 035431
1679 1000 0 230641
1694 1000 -11 000003
1716 1000 0 000000
1745 1000 0 000001
1748 1000 0 000006
1792 1000 0 000000
1983 1001 0 002207
2744 1000 0 000000
2745 1000 0 000010
2746 1000 0 000014
2747 1000 0 000000
2748 1000 0 000000
2876 1000 0 000000
2968 1000 0 000000
3111 1001 0 000000
3120 1001 0 000000
3614 1000 0 000010
3615 1000 0 000000
3616 1000 0 000000
3624 1000 0 000000
4326 1000 0 000000
4328 1000 0 000000
5574 1000 0 000001
5575 1000 0 000000
5576 1000 0 000000
6631 1000 0 034310
7729 1000 0 000002
9358 1001 0 001215
9453 1001 0 001212
11437 1001 0 000000
11971 1000 0 000000
13508 1001 0 000134
15130 1001 0 003458
16713 1000 0 000000
16715 1000 0 000043
20105 1001 0 000004
20111 1001 0 000021
22670 1000 0 000000
23496 1000 0 000000
23526 1000 0 000000
23865 1001 0 000755
24137 1001 0 000003
25023 1001 0 000631
25057 1001 0 000626
25660 1001 0 000538
26310 1001 0 000104
26354 1001 0 000441
26506 1000 0 000000
26724 1001 0 000411
26802 1000 0 000000
27071 1001 0 000041

这些过程中的一些明显满足条件。那为什么不出现?我做错了什么?

再次感谢!     27082 1001 0 003040     27426 1001 0 000317     29626 1001 0 002744     31705 1001 0 002531     32090 1000 0 000008     32091 1000 0 000000     32092 1000 0 000000     32760 1001 0 000040

2 个答案:

答案 0 :(得分:0)

  

但是如何获得pidlist?

通读man ps并在此处查看各种格式选项。根据文档,这样的内容将为您提供进程ID列表及其相应的CPU时间:

ps -e -o pid= -o cputime=

通过awk运行,您应该拥有您正在寻找的列表。

答案 1 :(得分:0)

您需要使用ps不仅可以获得时间,还可以获得作业nice d。此外,您可能不希望混淆低编号的进程。正如上面提到的larsks,awk是处理ps的基于列的输出的好工具:

# get the output from ps; setting column name to empty string suppresses header
ps -e -o pid= -o cputime= -o nice= |
# replace the colons so time is a plain number; omit system and already nice processes 
awk '{gsub(/:/, "", $2); time = $2 + 0; if ($1 > 1024 && time > 1000 && $3 <= 0) print $1}' |
# renice the ones left
xargs renice +10