我认为使用pgrep
更容易。
$ pgrep bluetoothd
441
awk
:ps -ef | awk '$8=="name_of_process" {print $2}'
ps -ef
有如下一行:root 441 1 0 10:02 ? 00:00:00 /usr/sbin/bluetoothd
然后,ps -ef | awk '$8=="/usr/sbin/bluetoothd" {print $2}'
返回441
。
在ksh中找不到pgrep。另一种解决方案在以下情况下失败: ps命令的输出如下:jaggsmca325 7550 4752 0 Sep 11 pts/44 0:00 sqlplus dummy_user/dummy_password@dummy_schema
让我们检查最后一列($NF
),无论其数字是多少:
$ ps -ef | awk '$NF=="/usr/sbin/bluetoothd" {print $2}'
441
~
:$ ps -ef | awk '$NF~"bluetooth" {print $2}'
441
1906
jaggsmca325 7550 4752 0 Sep 11 pts/44 0:00 sqlplus dummy_user/dummy_password@dummy_schema
- gahlot.jaggs$NF
,你也可以使用$(NF-1)
等。因此,你可以使用$(NF-1)=="sshd:" && $NF=="jaggsmca325@pts/53"
。 - fedorquigrep "process$"
,因为 $
表示行尾。然后将字符串传递给 awk 命令以打印第二个记录。 - fedorquips | awk
解决方案失败,因为ps
的输出不是您想要的,请进行更改:ps -eaf -o pid,cmd | awk '/regex-to-match-command-name/{ print $1 }'
ps
根据您的平台而异(但我认为 -o
是标准的)。请查看您的文档以了解如何操作输出字段。(man ps
) - William Pursellps
命令还支持 o
(不带 -
)和 --format
,具体取决于您的平台。 - go2nullps -C <the-name> -o etime=
我的ps命令来自procps-ng。
ps -C <进程名称> -o user= | head -1
来获取进程所有者(用户)。 - vladkras
uname -a
的输出。 - Henk Langeveld