通常我想获得一个很好的读数什么过程正在运行和他们的关系;我通常习惯于运行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