2011-09-21 79 views
1

我试图做一个服务器管理器,但我需要获取进程ID和一些进程的命令。限制grep的输出

例如:

ps ax | grep ./skulltag 
4760 pts/2 Tl  0:02 ./skulltag-server 
4793 pts/2 Tl  0:01 ./skulltag-server 
4956 pts/2 Tl  0:01 ./skulltag-server -port 13000 
4958 pts/2 Tl  0:26 ./skulltag-server -port 13001 

我将如何得到它只是返回的过程中,只返回命令(./skulltag-server)或两者兼而有之?谢谢。

+0

你可能要考虑使用'--format'选项'ps'得到的只有你和形式有兴趣的字段您可以使用基本的shell工具轻松切割。 –

回答

3

可以通过管道将awk选择哪些领域,以输出

例如ps ax | grep ./skulltag | awk '{ print $1 }'将打印的第一列(PID)

注意,你可能还需要考虑使用-o选项ps修改其输出

+0

但是,我正在试图将这个与PHP脚本结合使用,使用$ COMMAND = shell_exec(“ps ax | grep ./skulltag | awk'{print $ 5}”);和echo $ COMMAND,$ COMMAND不会返回任何内容。有什么办法可以让它通过PHP在网页上显示单个命令?谢谢。 – John

+0

Nevermind,ps - 格式命令| grep ./skulltag做了诡计! – John

3

我认为你应该使用AWK

ps ax | grep ./skulltag | awk '{print $1}' # Or $5, or $1 and $5 

这会给你进程ID列表。

+0

谢谢,这工作完美! – John

1

你可以使用awk提取你想要的列解析的ps ax结果:

[email protected]:~/tmp$ ps ax | grep bash 
1906 pts/5 Ss+ 0:00 bash 
13749 pts/31 Ss  0:00 bash 
27315 ?  SN  0:00 /bin/bash /etc/cron.daily/backup 
27648 pts/31 S+  0:00 grep --color=auto bash 

[email protected]:~/tmp$ ps ax | grep bash | awk '{print $1}' 
1906 
13749 
27315 
27652 

[email protected]:~/tmp$ ps ax | grep bash | awk '{print $5}' 
bash 
bash 
/bin/bash 
grep 
3

为了得到进程ID,您还可以使用非标准但方便pgrep

ps ax | grep ./skulltag | awk '{ print $1 }' 

大致等同于:

pgrep skulltag 
+1

太棒了!我不知道'pgrep' –