Bagaimana cara selalu memotong PID dari perintah `ps aux`?

Saya ingin mendapatkan pid dari proses saya. Saya melakukannya ps aux | cut -d ' ' -f 2 tetapi saya perhatikan bahwa terkadang ia mendapat pid dan terkadang tidak:

[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

perhatikan bahwa perintah cut pertama menyalurkannya ke 2 sedangkan perintah kedua menyalurkannya ke 3. Bagaimana cara memilih PID dari ini tanpa harus mengetahui nomor mana yang akan digunakan (2 atau 3)?

Bisakah seseorang memberi tahu saya perbedaan antara ini dan mengapa ia memilih yang satu dan bukan yang lain?


person makansij    schedule 01.09.2017    source sumber


Jawaban (3)


-d ' ' berarti menggunakan satu spasi sebagai pembatas. Karena ada 1 spasi sebelum 2049 dan 2 spasi sebelum 12290, perintah Anda mendapatkannya dengan -f 2 dan -f 3.

Saya sarankan menggunakan ps aux | awk '{print $2}' untuk mendapatkan pid tersebut.

Atau Anda dapat menggunakan tr untuk menekan spasi tersebut terlebih dahulu ps aux | tr -s ' ' | cut -d ' ' -f 2

person CtheSky    schedule 02.09.2017

Anda dapat menggunakan opsi -o untuk mencetak pid saja:

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

Anda selalu dapat menggunakan pgrep untuk mendapatkan PID proses

Misalnya PID dengan 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

Sekarang tinggal pgrep untuk mendapatkan PID

wix@wsys:~$ pgrep sshd
1101
6372
6481
6497
6580
wix@wsys:~$ 
person Waqar Afridi    schedule 15.10.2020
comment
Bagaimana hubungannya dengan pertanyaan OP? - person Nicolas Melay; 15.10.2020
comment
Saya pikir tujuannya adalah untuk mendapatkan PID jadi mengapa tidak menggunakan alat yang ada daripada menggunakan rantai perintah yang rumit. - person Waqar Afridi; 16.10.2020
comment
Dia tidak merinci apa maksud akhirnya, tapi karena mengumpulkan PID dari SEMUA proses Anda tampaknya tidak ada gunanya, saya rasa Anda mungkin benar. - person Nicolas Melay; 20.10.2020
comment
Bahkan jika Anda menginginkan semua proses, Anda dapat melakukan pgrep - person Ted Brownlow; 18.11.2020
comment
bagaimana melakukannya untuk /sbin/lvmetad -f pgrep tidak akan menampilkan PID - person Kishore; 17.02.2021