如何用标题来 grep ps 输出

如何用标题来 grep ps 输出

我怎样才能 grep 带有标题的 PS 输出?

这两个过程组成了一个在我的服务器上运行的应用程序....

root     17123 16727  0 16:25 pts/6    00:00:00 grep GMC
root     32017     1 83 May03 ?        6-22:01:17 /scripts/GMC/PNetT-5.1-SP1/PNetTNetServer.bin -tempdir /usr/local/GMC/PNetT-5.1-SP1/tmpData -D

这是否6-22:01:17意味着它已经运行了 6 天?我想确定该进程运行了多长时间……

第二列是进程 ID 吗?那么如果我这样做,kill 32017它会终止第二个进程吗?

答案1

ps -ef | egrep "GMC|PID"

ps根据需要更换“GMC”和开关。

示例输出:

root@xxxxx:~$ ps -ef | egrep "disk|PID"

UID        PID  PPID  C STIME TTY          TIME CMD
paremh1  12501 12466  0 18:31 pts/1    00:00:00 egrep disk|PID
root     14936     1  0 Apr26 ?        00:02:11 /usr/lib/udisks/udisks-daemon
root     14937 14936  0 Apr26 ?        00:00:03 udisks-daemon: not polling any devices

ps -e选择所有流程,并ps -f以全格式列表的形式显示列标题。

答案2

感谢 geekosaur,我想使用此命令来满足您的需求,而不是单独的命令:

ps -ef | head -1; ps -ef | grep "your-pattern-goes-here"

诀窍在于利用 shell 支持的“;”来链接命令。

答案3

更简单的替代方案: ps -ef | { head -1; grep GMC; }

将数字替换为标题显示的行数。

答案4

egrep 解决方案简单实用,但当然,您需要依赖始终包含“PID”的标头(尽管这是一个非常合理的假设),并且相同的字符串不会在其他地方出现。我猜这足以满足您的需求,但如果有人想要替代方案,可以使用 sed。

Sed 允许您直接说“打印第一行,然后打印任何包含该模式的行”。例如:

ps auxwww | sed -n '1p; /PROCESS_NAME_TO_SEARCH/p;'

添加/sed -n/d;过滤器以删除 sed 本身:

ps auxwww | sed -n '1p; /sed -n/d; /PROCESS_NAME_TO_SEARCH/p;'

相关内容