Saya tahu bahwa pkill
memiliki aturan penyaringan lebih dari killall
. Pertanyaan saya adalah, apa perbedaan antara:
pkill [signal] name
dan
killall [signal] name
Saya sudah membaca yang killall
lebih efektif dan membunuh semua proses dan subproses (dan secara rekursif) yang sesuai dengan name
program. pkill
tidak melakukan ini juga?
linux
process
kill
process-management
mavillan
sumber
sumber
Jawaban:
The
pgrep
danpkill
utilitas diperkenalkan di Sun Solaris 7 dan, sebagai g33klord mencatat , mereka mengambil pola sebagai argumen yang dicocokkan dengan nama-nama proses yang berjalan. Sementarapgrep
hanya mencetak daftar proses yang cocok,pkill
akan mengirim sinyal yang ditentukan (atauSIGTERM
secara default) ke proses. Opsi umum dan semantik di antarapgrep
danpkill
berguna ketika Anda ingin berhati-hati dan pertama meninjau proses pencocokan daftarpgrep
, kemudian lanjutkan untuk mematikannyapkill
.pgrep
danpkill
disediakan oleh para procps paket, yang juga menyediakan lainnya/proc
utilitas sistem file, sepertips
,top
,free
,uptime
antara lain.The
killall
perintah disediakan oleh psmisc paket, dan berbeda daripkill
dalam bahwa, secara default, cocok dengan nama argumen persis (hingga 15 pertama karakter) ketika menentukan proses sinyal akan dikirim ke. The-e
,--exact
pilihan dapat ditentukan untuk juga membutuhkan yang tepat sama dengan nama-nama lebih dari 15 karakter. Ini membuatkillall
agak lebih aman untuk digunakan dibandingkan denganpkill
. Jika argumen yang ditentukan berisi/
karakter slash ( ), argumen tersebut ditafsirkan sebagai nama file dan proses yang menjalankan file tertentu akan dipilih sebagai penerima sinyal.killall
juga mendukung pencocokan ekspresi reguler dari nama-nama proses, melalui-r
,--regexp
pilihan.Ada perbedaan lain juga. The
killall
perintah misalnya memiliki pilihan untuk proses pencocokan usia (-o
,--older-than
dan-y
,--younger-than
), sedangkanpkill
bisa dikatakan hanya proses membunuh pada terminal tertentu (melalui-t
pilihan). Maka jelas, kedua perintah memiliki relung tertentu.Perhatikan bahwa
killall
perintah pada sistem yang diturunkan dari Unix System V (terutama Sun's Solaris , AIX IBM dan HP-UX HP ) membunuh semua proses yang dapat dibunuh oleh pengguna tertentu, secara efektif mematikan sistem jika dijalankan oleh root.Utilitas psmisc Linux telah porting ke BSD (dan dalam ekstensi Mac OS X ), maka
killall
ada mengikuti semantik "membunuh proses dengan nama".sumber
killall -u <username> -r <process>
ataupkill <process> -U <uid>
yang membuatkillall
saya lebih mudah untuk menggunakannya.pkill
adalah salah satu yang layak untuk diajarkan generasi mendatang, baik karena filter yang Anda sebutkan dan fakta bahwa itu dipasangkan dengan yang sangat dapat digunakan kembalipgrep
. Mereka membunuh proses dengan cara yang sama, dan tidak ada yang membunuh secara rekursif - meskipun denganpgrep
, Anda dapat memilih berdasarkan sesi (per-tty, think setsid) atau grup proses (think control pekerjaan).sumber
satu perbedaan adalah bahwa
killall
mengambil nama proses yang tepat sebagai argumen sedangkanpkill
dapat mengambil nama parsial atau lengkap.Anda dapat merujuk pertanyaan ini untuk mengetahui secara mendalam tentang pkill
sumber
killall
- Matikan proses dengan nama. Gunakankillall
perintah untuk mengirim sinyal ke satu atau lebih proses yang cocok dengan kriteria pemilihan, seperti nama perintah, proses yang dimiliki oleh pengguna tertentu, atau semua proses di seluruh sistem.pkill
- akan mengirim sinyal yang ditentukan (secara default SIGTERM) ke setiap proses alih-alih mencantumkannya di stdout.pkill
dapat memberi sinyal beberapa proses sepertikillall
, tetapi juga dapat menggunakan kriteria seleksi lanjutan yang dapat menyertakan kombinasi dari:Perintah Terminal Induk UID
sumber