如何始终从 `ps aux` 命令中删除 PID?

How to always cut the PID from `ps aux` command?

我想从我的进程中获取 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。如何在不知道要使用哪个数字(23)的情况下从中挑选出 PID?

谁能告诉我它们之间的区别以及为什么它拾起一个而不拾取另一个?

-d ' ' 表示使用单个 space 作为分隔符。由于在 2049 之前有 1 个 space,在 12290 之前有 2 个 space,您的命令通过 -f 2-f 3 获取它们。

我建议使用 ps aux | awk '{print }' 获取这些 pids。

或者你可以先用tr压缩那些space ps aux | tr -s ' ' | cut -d ' ' -f 2

您可以使用选项 -o 仅打印 pid:

ps -u user -o pid

您始终可以使用 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:~$