130 unix linux process top-command
top -c
Run Code Online (Sandbox Code Playgroud)
Top列出了所有进程,有很好的选项可以通过使用选项-u按用户名过滤进程,但我想知道是否有任何简单的方法来根据顶部输出的COMMAND列下列出的进程名过滤进程.
例如,我想要top -some选项-substring of processname和top显示pids只在其命令名中包含此子字符串
per*_*eal 192
使用pgrep获取匹配命令行的pid:
top -c -p $(pgrep -d',' -f string_to_match_in_cmd_line)
Run Code Online (Sandbox Code Playgroud)
top -p期望以逗号分隔的pid列表,因此我们-d','在pgrep中使用.-fpgrep中的标志使其与命令行匹配而不是程序名称.
nos*_*nos 103
它可以以交互方式完成
运行后top -c,o在列上点击并写入一个过滤器,例如显示COMMAND列包含字符串foo的行,写入COMMAND=foo
如果您只想要一些基本输出,这可能就足够了:
top -bc |grep name_of_process
Run Code Online (Sandbox Code Playgroud)
Don*_*kby 78
您可以在top运行时添加过滤器,只需o按键,然后键入过滤器表达式.例如,要监视所有java进程,请使用筛选表达式COMMAND=java.您可以再次按键添加多个过滤器,您可以使用u键过滤用户,并可以使用=键清除所有过滤器.
BBW*_*ows 13
@perreal的命令很棒!如果你忘了,试试两步......
示例:过滤顶部仅显示名为yakuake的应用程序:
$ pgrep yakuake
1755
$ top -p 1755
Run Code Online (Sandbox Code Playgroud)
有用的顶级交互式命令'c':切换完整路径与命令名'k':按PID'F'杀死:过滤...用箭头选择...然后按's'设置排序
下面的答案也很好......我今天正在寻找,但找不到它.谢谢
在StackOverflow上寻找这么多答案之后,我还没有看到满足我需求的答案.
也就是说,使用top命令继续使用给定的关键字进行刷新,并且当新进程生成时,我们不必一次又一次地使用CTRL + C/top.
因此,我做了一个......
这是无需重启的版本.
__keyword=name_of_process; (while :; do __arg=$(pgrep -d',' -f $__keyword); if [ -z "$__arg" ]; then top -u 65536 -n 1; else top -c -n 1 -p $__arg; fi; sleep 1; done;)
Run Code Online (Sandbox Code Playgroud)
修改__keyword它应该有效.(Ubuntu 2.6.38测试)
2.14.2015补充:上面的代码缺少系统工作负载部分.对于关心"平均负载"部分的人:
__keyword=name_of_process; (while :; do __arg=$(pgrep -d',' -f $__keyword); if [ -z "$__arg" ]; then top -u 65536 -n 1; else top -c -n 1 -p $__arg; fi; uptime; sleep 1; done;)
Run Code Online (Sandbox Code Playgroud)
在 中htop,您可以简单地搜索
/process-name
Run Code Online (Sandbox Code Playgroud)