我正在寻找一行可以返回正在运行的进程的 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