我经常想要了解正在运行的进程及其关系;我通常通过习惯运行ps auxfww
并最终使用grep来处理相关过程。
一直在思考这个问题,我试图创建一个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上,但感觉它更像是一个编程问题)
答案 0 :(得分:0)
这是一个略短且可能稍快的版本。它可能依赖于一些特定于GNU的功能:
ps ufww --sid=$(ps -C apache2 -o sess= | sort -u | grep -v -E '^ +0$' | tr $'\n' ',' | sed 's/,$/\n/; s/ //g')
超过50个字符。
更短但没有错综复杂的阴谋:
ps -C apache2 fww -o user,pid,%cpu,%mem,vsz,rss,tty,stat,start,time,cmd
看!没有滚动条!
我不明白你的意思:
例如,我实际上希望将所有孩子都包含在任何父母中。
这不是ps auxfww
的作用吗?
如果要轻松指定进程名称作为参数,可以创建ps“family”函数:
psf () { ps -C $1 fww -o user,pid,%cpu,%mem,vsz,rss,tty,stat,start,time,cmd; }
答案 1 :(得分:0)
简单读出流程及其关系的选项是:
ps -ejH