Как всегда вырезать PID из команды ps aux?

Я хотел бы получить 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)?

Может кто-нибудь, пожалуйста, скажите мне разницу между ними и почему он поднимает один, а не другой?


person makansij    schedule 01.09.2017    source источник


Ответы (3)


-d ' ' означает использование одного пробела в качестве разделителя. Поскольку перед 2049 есть 1 пробел, а перед 12290 2 пробела, ваша команда получает их с помощью -f 2 и -f 3.

Я рекомендую использовать ps aux | awk '{print $2}' для получения этих pids.

Или вы можете использовать tr, чтобы сначала сжать эти пробелы ps aux | tr -s ' ' | cut -d ' ' -f 2

person CtheSky    schedule 02.09.2017

Вы можете использовать опцию -o для вывода только pid:

ps -u user -o pid
person Minh Tuan Nguyen    schedule 02.09.2017

Вы всегда можете использовать pgrep для получения PID процесса.

Например, PID с PS AUX

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:~$ 
person Waqar Afridi    schedule 15.10.2020
comment
Как это связано с вопросом ОП? - person Nicolas Melay; 15.10.2020
comment
Я полагаю, что цель состоит в том, чтобы получить PID, так почему бы не использовать инструмент под рукой, а не использовать сложную цепочку команд. - person Waqar Afridi; 16.10.2020
comment
Он не уточнил, каково его окончательное намерение, но поскольку сбор PID ВСЕХ ваших процессов кажется бессмысленным, я думаю, вы можете быть правы. - person Nicolas Melay; 20.10.2020
comment
Даже если вам нужны все процессы, вы можете выполнить pgrep - person Ted Brownlow; 18.11.2020
comment
как сделать для /sbin/lvmetad -f pgrep не будет показывать PID - person Kishore; 17.02.2021