如何使用解析 ps 输出的单个命令来获取正在运行的进程的 pid?

如何使用解析 ps 输出的单个命令来获取正在运行的进程的 pid?

我正在寻找一行可以返回正在运行的进程的 pid 的代码。

目前我有:

ps -A -o pid,cmd|grep xxx|head -n 1

这将返回第一个pid, command。我只需要输出中的第一个数字,而忽略其余数字。我想sedawk会有所帮助,但我对它们的经验有限。

此外,这还有另一个问题,如果 xxx 没有运行,它将返回 grep 的 pid。

单行确实很重要,因为我想重用输出来做其他事情,例如终止该进程。

答案1

如果你只想要进程的 pid,你可以使用pgrep如果可用,pgrep <command>将返回命令的 pid(或 pid 列表,如果有多个命令实例正在运行,在这种情况下您可以使用head或其他适当的命令)
希望这会有所帮助!

答案2

只需要一个命令;您只需要一行空格分隔的值中的第一个字段:

ps -A -o pid,cmd|grep xxx | grep -v grep |head -n 1 | awk '{print $1}'

嗯,两个。我添加了另一个 grep,以从输出中删除 grep 本身。

答案3

只需使用 pgrep,它更直接

pgrep -o -x xxxx

以上选择具有确切名称的最旧进程

答案4

在 Cygwin 上运行,所以我不能使用 -A 和 -o,但像这样:

$ ps
      PID    PPID    PGID     WINPID   TTY     UID    STIME COMMAND
     4580       1    4580       4580  ?       55573   May 21 /usr/bin/mintty
     5808    7072    5808       7644  pty3    55573 13:35:31 /usr/bin/ps
     7072    5832    7072       6424  pty3    55573   May 21 /usr/bin/bash


$ ps | grep '/usr/bin/mintty' | head -n 1 | awk '{print $1}'
4580

相关内容