Apa perbedaan antara pkill dan killall?

49

Saya tahu bahwa pkillmemiliki aturan penyaringan lebih dari killall. Pertanyaan saya adalah, apa perbedaan antara:

pkill [signal] name

dan

killall [signal] name

Saya sudah membaca yang killalllebih efektif dan membunuh semua proses dan subproses (dan secara rekursif) yang sesuai dengan nameprogram. pkilltidak melakukan ini juga?

mavillan
sumber

Jawaban:

46

The pgrepdan pkillutilitas diperkenalkan di Sun Solaris 7 dan, sebagai g33klord mencatat , mereka mengambil pola sebagai argumen yang dicocokkan dengan nama-nama proses yang berjalan. Sementara pgrephanya mencetak daftar proses yang cocok, pkillakan mengirim sinyal yang ditentukan (atau SIGTERMsecara default) ke proses. Opsi umum dan semantik di antara pgrepdan pkillberguna ketika Anda ingin berhati-hati dan pertama meninjau proses pencocokan daftar pgrep, kemudian lanjutkan untuk mematikannya pkill. pgrepdan pkilldisediakan oleh para procps paket, yang juga menyediakan lainnya /procutilitas sistem file, seperti ps, top, free, uptimeantara lain.

The killallperintah disediakan oleh psmisc paket, dan berbeda dari pkilldalam bahwa, secara default, cocok dengan nama argumen persis (hingga 15 pertama karakter) ketika menentukan proses sinyal akan dikirim ke. The -e, --exactpilihan dapat ditentukan untuk juga membutuhkan yang tepat sama dengan nama-nama lebih dari 15 karakter. Ini membuat killallagak lebih aman untuk digunakan dibandingkan dengan pkill. Jika argumen yang ditentukan berisi /karakter slash ( ), argumen tersebut ditafsirkan sebagai nama file dan proses yang menjalankan file tertentu akan dipilih sebagai penerima sinyal. killalljuga mendukung pencocokan ekspresi reguler dari nama-nama proses, melalui -r, --regexppilihan.

Ada perbedaan lain juga. The killallperintah misalnya memiliki pilihan untuk proses pencocokan usia ( -o, --older-thandan -y, --younger-than), sedangkan pkillbisa dikatakan hanya proses membunuh pada terminal tertentu (melalui -tpilihan). Maka jelas, kedua perintah memiliki relung tertentu.

Perhatikan bahwa killallperintah 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 killallada mengikuti semantik "membunuh proses dengan nama".

Thomas Nyman
sumber
Perbedaan utama yang saya temui adalah menghentikan perintah dari suatu pola oleh pengguna killall -u <username> -r <process>atau pkill <process> -U <uid>yang membuat killallsaya lebih mudah untuk menggunakannya.
jeremysprofile
13

pkilladalah salah satu yang layak untuk diajarkan generasi mendatang, baik karena filter yang Anda sebutkan dan fakta bahwa itu dipasangkan dengan yang sangat dapat digunakan kembali pgrep. Mereka membunuh proses dengan cara yang sama, dan tidak ada yang membunuh secara rekursif - meskipun dengan pgrep, Anda dapat memilih berdasarkan sesi (per-tty, think setsid) atau grup proses (think control pekerjaan).

Gabriel
sumber
8

satu perbedaan adalah bahwa killallmengambil nama proses yang tepat sebagai argumen sedangkan pkilldapat mengambil nama parsial atau lengkap.

Anda dapat merujuk pertanyaan ini untuk mengetahui secara mendalam tentang pkill

electropoet
sumber
1

killall- Matikan proses dengan nama. Gunakan killallperintah 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. pkilldapat memberi sinyal beberapa proses seperti killall, tetapi juga dapat menggunakan kriteria seleksi lanjutan yang dapat menyertakan kombinasi dari:

Perintah Terminal Induk UID

pengguna196507
sumber