我試圖採取ps axo uname,pid,etime,time,cmd
的輸出,並殺死所有相關流程與ETIME> = 10如果他們的etime大於X的時間量,我該如何殺死特定的進程?
我需要殺死的PID僅適用於被存儲在一個單獨的文件中的特定用戶,users.txt
基本上,我想查看我所有的列,並且想要查找屬於特定用戶的所有php {5,54}進程,並存儲在一個文件中,並在執行時間超過10分鐘時終止這些進程。 (殺-9不需要)
例PS輸出:
username 574 01:37 00:00:18 /ramdisk/bin/php54 /home/username/public_html/index.php
usernum2 1367 10:28 00:00:16 /ramdisk/bin/php54 /home/usernum2/public_html/index.php
user3 3971 1-04:17:31 00:00:14 /ramdisk/bin/php54 /home/user3/public_html/index.php
usernum4 9130 14:05:32 00:00:29 /ramdisk/bin/php54 /home/usernum4/public_html/index.php
username 9189 1-01:31:12 00:00:25 /ramdisk/bin/php54 /home/username/public_html/index.php
我的想法一直把ps輸出到一個文件(說procs.txt),然後通過一些grep。 EG:
ps axo uname,pid,etim,time,cmd | grep 'php5' | tee procs.txt
我可以有兩條獨立的線路:一個是說,如果第3列是超過5個字符殺了PID,這是很容易,然後又用類似下面的,但沒有按「留下我與相關的PID,所以我不能殺了他們:
for i in $(cat users.txt); do grep $i procs.txt | awk '{print $3}' | awk -F: '{print $(NF-1)}' | awk '$1>=10{print $1}'; done
[這個答案](http://serverfault.com/a/181503)可能是你想要的。 – chrisaycock
我在之前的搜索中看到了這一點。它假設一個靜態值(在他們的例子中是「page.py」),但是我的變化並且需要重新格式化。 EG:1:04:17:31 vs 10:28。感謝您的回覆。 – Mic
對於Fedora上的這個問題的任何人,他們可以使用ps和etimes(秒),這使得更容易,如果> = ...不幸的是我在CentOS上,不能安裝procps-ng – Mic