我有一个典型的案例,我必须杀死所有打开并运行时间超过特定日期的进程。
我起草的命令有点像这样
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/>
我正在尝试编写以下逻辑:
取awk下的第一列 例如`1-19:48:25
在第一个连字符前取字符。
例如在这种情况下,它是1
我不知道如何做第2步&amp; 3内部awk命令。我是awk脚本的新手;任何帮助表示赞赏。
答案 0 :(得分:1)
更简单的方法是使用killall的--older-than
选项:
仅匹配较早(之前开始)时间的进程 指定。时间被指定为浮点数然后是单位。该 单位是秒,分,小时,天,s,m,h,d,w,M,y, 几周,几个月和几年。