![如何使用解析 ps 输出的单个命令来获取正在运行的进程的 pid?](https://linux22.com/image/1315926/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%E8%A7%A3%E6%9E%90%20ps%20%E8%BE%93%E5%87%BA%E7%9A%84%E5%8D%95%E4%B8%AA%E5%91%BD%E4%BB%A4%E6%9D%A5%E8%8E%B7%E5%8F%96%E6%AD%A3%E5%9C%A8%E8%BF%90%E8%A1%8C%E7%9A%84%E8%BF%9B%E7%A8%8B%E7%9A%84%20pid%EF%BC%9F.png)
我正在寻找一行可以返回正在运行的进程的 pid 的代码。
目前我有:
ps -A -o pid,cmd|grep xxx|head -n 1
这将返回第一个pid, command
。我只需要输出中的第一个数字,而忽略其余数字。我想sed
或awk
会有所帮助,但我对它们的经验有限。
此外,这还有另一个问题,如果 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