2013-04-01 29 views
0

我需要創建一個shell腳本來按狀態類型列出進程。 輸出必須是這樣的:創建按狀態排序的進程列表

進程中運行:

[進程]

過程睡眠:

[進程]

ETC

我這樣做,但沒有工作ps aux | AWK '$ 8〜PROCESS'

for PROCESS in `ps -v | awk 'NR!=1 {print $2}' | sort -u`; do 
    echo "Procesos como $PROCESS:" 
    ps aux | awk '$8 ~ PROCESS' 
done 

原因在於腳本輸出所有的過程,而不是由處理過濾器。

任何幫助?

+0

首先是有一個錯字,你缺失$ **的ps aux | awk'$ 8〜$ PROCESS'** – Satish

回答

1

一個簡單的解決辦法是使用pssort

ps u | sort -rk 8 

-r反轉排列(使得列表標題上述保持),並-k 8選擇第八字段(STAT)。

然後,您可以使用headawk之間的任何形式選擇特定狀態的進程,並打印出您喜歡的任何內容。

+0

without ** sort -rk 8 **我得到相同的輸出 – Satish

+0

默認情況下,'ps'按PID來排序。你可能有'ps'別名,或者它可能是巧合 – slezica

+0

uʍopǝpısdn:Doesn't works: ps u | sort -rk 8 每次只返回相同的進程,並且它們不是按進程進行篩選 –

0

您還可以使用上面,在非交互模式(-S選項來顯示和排序狀態):

top -b -n 1 -S 
+0

但是我如何爲每個進程傳遞變量?之後我必須使用awk。真正的問題是:awk'$ 8〜PROCESS'不起作用 –

+0

下面的命令對我來說很不錯,它提取了pid,狀態和進程名稱:'top -b -n 1 -S | awk'{print $ 1'''$ 8「'$ 12}'' – ylabidi