2013-03-22 46 views
-1

每个人都知道如何恼人的是这样的:我该怎么做,而不是grep'ing ps的输出?

[mybox:~ #] ps aux | grep myservice 
root  2273 0.0 0.0 4360 760 ?  Ss 18:06 0:00 /usr/sbin/myservice 
root  18590 0.0 0.0 4100 788 pts/2 S+ 21:21 0:00 grep myservice 

你得到你所寻找的过程,再加上grep的。所以,OK,你可以这样做:

[mybox:~ #] ps aux | grep myservice | grep -v grep 
root  2273 0.0 0.0 4360 760 ?  Ss 18:06 0:00 /usr/sbin/myservice 

[mybox:~ #] pgrep myservice 
2273 

但前者3级全的命令,而后者只得到你的进程ID。有没有更好的选择?

回答

2

如果你现在该进程的全名

ps -F -C myservice 

,但它不会与'myserv*'

myserv如果你只知道部分工作之一,可以减少你的命令到2:

ps aux | grep [m]yserv 
+1

'-p $(pgrep myserv)'而不是'-C myservice' – npostavs 2013-03-22 19:47:49

+0

虽然我的想法是减少命令,但仍然是2. – Wrikken 2013-03-22 19:49:15

1

ps + pgrep也许?

$ ps -fp $(pgrep myservice) 
UID PID PPID C STIME TTY TIME  CMD 
user 5422 5315 0 15:37 ? 00:00:04 /usr/bin/myservice 
+0

这将导致一个错误,如果该进程没有运行。 – Mehdi 2015-08-11 12:48:10

+0

的确如此。您总是可以重定向错误,以避免噪音('2>/dev/null'),或者将'pgrep'的输出保存在一个变量中,以便在'ps'之前检查它。 – tcurvelo 2015-08-11 13:52:33

2

如何存储管道命令s转换成一个小型bash shell,它需要一个位置参数?如果这是目标,这将减少击键。

[mybox:~ #] cat mycmd 
    #!/bin/bash 
    ps aux | grep $1 | grep -v grep 

可称为:

[mybox:~ #] mycmd myservice 
    root  2273 0.0 0.0 4360 760 ?  Ss 18:06 0:00 /usr/sbin/myservice 
+0

这是一个不错的主意,但是:1.如果你这样做,你有记住另一个shell命令2.如果它不是你的系统,并且你没有个人帐户,那么留下可执行脚本是不礼貌的。虽然你得到了upvote ... – einpoklum 2013-03-26 10:15:24

+0

不起作用... – Mehdi 2015-08-11 12:50:05