通常我想獲得一個很好的讀數什麼過程正在運行和他們的關係;我通常習慣於運行ps auxfww
,並且最終grep正在討論這個過程。ps forrest會話ID
一直在考慮這個問題,我嘗試創建一個oneliner來獲取ps ufww
格式的進程樹,該進程樹的所有進程都有由任意進程名指定的會話ID;在下面的代碼結束了:
ps ufww --sid=$(ps -C apache2 -o sess --no-headers | sort | uniq | grep -v -E '^ +0$' | awk 'NR==1{x=$0;next}NF{x=x","$0};END{gsub(/[[:space:]]*/,"",x);print x}')
給予例如以下的輸出:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 4157 0.0 0.1 41264 3120 ? Ss Jun11 0:00 /usr/sbin/apache2 -k start
www-data 4329 0.0 0.0 41264 1976 ? S Jun11 0:00 \_ /usr/sbin/apache2 -k start
www-data 4330 0.0 0.0 41264 2028 ? S Jun11 0:00 \_ /usr/sbin/apache2 -k start
www-data 4331 0.0 0.0 41264 2028 ? S Jun11 0:00 \_ /usr/sbin/apache2 -k start
www-data 4332 0.0 0.0 41264 2028 ? S Jun11 0:00 \_ /usr/sbin/apache2 -k start
www-data 4333 0.0 0.0 41264 2032 ? S Jun11 0:00 \_ /usr/sbin/apache2 -k start
www-data 6648 0.0 0.0 41264 1884 ? S Jun11 0:00 \_ /usr/sbin/apache2 -k start
www-data 6654 0.0 0.0 41264 1884 ? S Jun11 0:00 \_ /usr/sbin/apache2 -k start
www-data 6655 0.0 0.0 41264 1884 ? S Jun11 0:00 \_ /usr/sbin/apache2 -k start
我現在不知道有沒有人有一個更好的主意來解決這個問題?有沒有什麼比這更容易「在線」,並提供更多或更好的信息?例如,我實際上想要包含所有孩子相對於任何父母。
(不確定這是否應該是在SF代替,但覺得它更像是一個編程的問題)
ps是由腳本或人類解析的絕對怪物。我有點印象深刻,你得到了儘可能多的。如果按下更遠的話,我會放棄使用ps並從'/ proc/[0-9] */stat'工作,這在語法上更加規律。 – msw 2010-06-12 00:49:16