如何始终从`ps aux`命令切断PID?

时间:2017-09-01 22:53:03

标签: grep cut ps

我想从我的流程中获取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而无需知道要使用的号码(23)?

有人可以告诉我这些之间的区别以及它为什么选择一个而不是另一个?

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:~$