Saya seorang pemula untuk pemrograman shell. Dengan asumsi bahwa saya telah memulai program (misalnya NetBeans) dari terminal saya, jika saya mengetik
ps aux|grep netbeans
Saya mendapatkan hasilnya
pre 18775 1.2 0.0 12524 1972 pts/3 S 20:17 0:00
di mana 18775 menentukan PID dll dari proses.
Lalu aku membunuhnya menggunakan
kill 18775.
di mana NetBeans UI menghilang. Jika saya mencoba mendapatkan pid dengan menggunakan perintah pertama, saya masih mendapatkan:
pre 19137 0.0 0.0 9136 1068 pts/3 S+ 20:19 0:00 grep --color=auto netbeans
Jika proses telah mati, mengapa masih menunjukkan output di atas?
command-line
P. Ramesh
sumber
sumber
grep netbeans
, itulah program yang Anda lihat di akhir baris (grep --color=auto netbeans
)Jawaban:
grep adalah grepping itu sendiri. Coba sesuatu seperti:
ini membuat grep tidak menampilkan dirinya dalam output
sumber
ps aux | grep netbeans | grep -v grep
. Tapi gunakan pgrep sebagai gantinya.pgrep
akan menyenangkan, tetapi hanya cocok dengan nama proses. Pola pertama dapat cocok dengan kolom mana saja darips
. (Misalnya, sesuatu berjalan di bawah python atau java, pgrep tidak akan menangkap hal yang benar. Sama denganpkill
dan seterusnya ..)Jangan pernah gunakan
ps
bersama dengangrep
.Sebaliknya, gunakan
killall netbeans
,pkill netbeans
untuk membunuhnya. Untuk ID prosespgrep netbeans
.Lebih lanjut tentang ps dan grep .
sumber
pgrep
,,pkill
dan seterusnya hanya nama proses kecocokan - apa pun yang ditafsirkan (java, python, bash, dll ...) hanya dapat dibedakan dari yang lain dengan nama proses yang sama dengan menggunakanps
.Karena itu PID untuk proses grep yang sedang antri untuk dijalankan setelahnya
ps aux
.sumber
grep
ini sudah berjalan saatps aux
berjalan. Saatps aux
dijalankan, outputnya dikirim kegrep
instance yang berjalan sebagai input. Jika shell belum dieksekusigrep
, itu tidak akan muncul di outputps
.