2013-03-22 49 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