I think it is easier to use pgrep
$ pgrep bluetoothd
441
Otherwise, you can use awk
:
ps -ef | awk '$8=="name_of_process" {print $2}'
For example, if ps -ef
has a line like:
root 441 1 0 10:02 ? 00:00:00 /usr/sbin/bluetoothd
Then ps -ef | awk '$8=="/usr/sbin/bluetoothd" {print $2}'
returns 441
.
In ksh pgrep is not found. and the other solution is failing in case
below is output from ps command jaggsmca325 7550 4752 0 Sep 11 pts/44
0:00 sqlplus dummy_user/dummy_password@dummy_schema
Let's check the last column ($NF
), no matter its number:
$ ps -ef | awk '$NF=="/usr/sbin/bluetoothd" {print $2}'
441
If you want to match not exact strings, you can use ~
instead:
$ ps -ef | awk '$NF~"bluetooth" {print $2}'
441
1906
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…