我想从我的流程中获取pid。我做ps aux | cut -d ' ' -f 2
但是我注意到有时候它会得到pid而有时却没有:
[user@ip ~]$ ps aux
user 2049 0.5 10.4 6059216 1623520 ? Sl date 8:48 process
user 12290 0.3 6.9 5881568 1086244 ? Sl date 2:30
[user@ip ~]$ ps aux | cut -d ' ' -f 2
12290
[user@ip ~]$ ps aux | cut -d ' ' -f 3
2049
注意第一个cut
命令将它传送到2
,而第二个命令将它传送到3
。如何从这些中选择PID而无需知道要使用的号码(2
或3
)?
有人可以告诉我这些之间的区别以及它为什么选择一个而不是另一个?
答案 0 :(得分:8)
str.format
表示使用单个空格作为分隔符。由于在2049年之前有1个空格,在12290之前有2个空格,因此您的命令可以通过-d ' '
和-f 2
获取。
我建议使用-f 3
来获取这些pids。
或者您可以先使用ps aux | awk '{print $2}'
来挤压这些空间
tr
答案 1 :(得分:3)
您可以使用 -o 选项仅打印pid:
ps -u user -o pid
答案 2 :(得分:1)
您始终可以使用 pgrep 来获取进程的PID
例如具有PS AUX的PID
wix@wsys:~$ ps aux | grep sshd
root 1101 0.0 0.0 72304 3188 ? Ss Oct14 0:00 /usr/sbin/sshd -D
root 6372 0.0 0.1 105692 7064 ? Ss 06:01 0:00 sshd: wix [priv]
wix 6481 0.0 0.1 107988 5748 ? S 06:01 0:00 sshd: wix@pts/1
root 6497 0.0 0.1 105692 7092 ? Ss 06:01 0:00 sshd: wix [priv]
wix 6580 0.0 0.1 107988 5484 ? S 06:01 0:00 sshd: wix@pts/2
wix 6726 0.0 0.0 13136 1044 pts/1 S+ 06:12 0:00 grep --color=auto sshd
现在只需pgrep即可获取PID
wix@wsys:~$ pgrep sshd
1101
6372
6481
6497
6580
wix@wsys:~$