根据模式匹配,杀死运行时间超过10天的Unix上的所有进程

时间:2011-11-03 18:00:44

标签: unix

我有一个典型的案例,我必须杀死所有打开并运行时间超过特定日期的进程。

我起草的命令有点像这样

ps -eo etime=,pid=,comm=,user=|**awk '/^[0-9]/** && /abcadmin/ {print $2}'|xargs -I{} kill {}

输出如下所示,awk过滤发生。

35-23:07:24 3227762 oracl     oracl<br/>
 2-23:07:51 3231800 oracl     oracl<br/>
 7-02:32:20 3235868 oracl     oracl<br/>
   22:59 :52 3240084 oracl     oracl<br/>
69-01:37:23 3244086 oracl     oracl<br/>
 5-23:29:34 3248352 oracl     oracl<br/>
 **5-23:29:34 3268752 abc     abcadmin<br/>
40-21:41:05 3272841 abc       abcadmin<br/>
11-21:41:05 3272842 abc       abcadmin**<br/>
 1-19:48:25 3301506 oracl     oracl<br/>
70-02:00:11 3305648 oracl     oracl<br/>
 2-02:17:39 3321950 oracl     oracl<br/>
      34:47 3326122 sshd         root<br/>

我正在尝试编写以下逻辑:

  1. 取awk下的第一列 例如`1-19:48:25

  2. 在第一个连字符前取字符。
    例如在这种情况下,它是1

  3. 检查它是否大于10,
  4. 如果是,则打印pids
  5. 删除pids。
  6. 我不知道如何做第2步&amp; 3内部awk命令。我是awk脚本的新手;任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

更简单的方法是使用killall--older-than选项:

  

仅匹配较早(之前开始)时间的进程   指定。时间被指定为浮点数然后是单位。该   单位是秒,分,小时,天,s,m,h,d,w,M,y,   几周,几个月和几年。