我该怎么做而不是grep输出ps的输出?

时间:2013-03-22 19:27:52

标签: shell grep shortcut idioms 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。所以,你可以做到:

[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。有没有更好的选择呢?

3 个答案:

答案 0 :(得分:2)

如果您现在是流程的全名

ps -F -C myservice

但它不适用于myserv

'myserv*'

如果只知道部分命令,可以将命令减少到2:

ps aux | grep [m]yserv

答案 1 :(得分:2)

如何将管道命令存储到一个带有位置参数的小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

答案 2 :(得分: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