Perintah pkill Linux: kirim SIGTERM berdasarkan nama proses

Perintah pkill mengirim sinyal ke proses yang cocok dengan nama atau kriteria tertentu. Sinyal bawaannya adalah SIGTERM, yaitu permintaan penghentian proses. Semua proses yang cocok dapat menjadi target, sehingga periksa kriteria dan hasil pencarian sebelum menjalankan perintah pengiriman sinyal.

Gunakan pgrep untuk memeriksa PID dan baris perintah terlebih dahulu dengan kriteria yang sama. Pgrep menampilkan hasil pencarian; pkill mengambil tindakan pada kecocokan saat pkill dijalankan. Pemeriksaan awal membantu mengenali target, tetapi bukan jaminan daftar proses tidak berubah di antara kedua perintah.

Sintaks dan syarat sebelum mencoba

pkill [OPSI] POLA

OPSI dan POLA adalah penanda yang diganti dengan pilihan serta pola nama. Penjelasan ini mengacu pada procps-ng; periksa pkill --version, pkill --help, dan man pkill pada sistem tujuan untuk memastikan opsi yang didukung.

Contoh menggunakan myworker dan demo-worker sebagai nama proses uji, bukan program bawaan yang pasti tersedia. Siapkan pekerjaan uji milik Anda yang memang bernama demikian melalui cara menjalankan aplikasi tersebut. Pastikan hasil pgrep hanya memuat pekerjaan uji yang hendak dihentikan; jika belum ada target uji yang teridentifikasi, jangan menjalankan baris pkill. Alice juga merupakan akun contoh yang perlu diganti.

Periksa nama proses yang dipakai pencocokan, bukan hanya nama berkas skrip atau teks yang terlihat pada argumen. Menamai berkas skrip myworker belum tentu membuat nama prosesnya menjadi myworker. Untuk layanan yang dikelola suatu pengelola layanan, gunakan prosedur penghentian normal layanan itu.

Periksa target, lalu minta penghentian

Periksa kecocokan nama penuh

pgrep -a -x myworker

-a menampilkan process ID (PID), yaitu nomor identitas proses, beserta seluruh baris perintah. -x meminta kecocokan seluruh nama. Baca setiap baris dan cocokkan PID serta perintahnya. Pgrep -a tidak menampilkan kolom pengguna; untuk memeriksanya, gunakan ps -p PID -o pid,user,comm,args dengan PID diganti nomor sebenarnya, sebagaimana dijelaskan pada panduan ps untuk identitas dan kolom proses. Jika beberapa baris muncul, perintah pkill berikutnya dapat menyasar lebih dari satu proses.

Kirim SIGTERM bawaan

pkill -x myworker

Jalankan setelah target uji dalam hasil sebelumnya sudah sesuai. Tidak menuliskan sinyal berarti memakai SIGTERM pada implementasi ini. Tidak adanya keluaran dari pkill bukan bukti bahwa semua pekerjaan telah selesai; periksa status perintah dan keadaan proses sesudahnya.

Batasi juga menurut pengguna

pkill -u alice -x myworker

Opsi -u membatasi identitas pengguna efektif atau effective user ID (EUID), bukan sekadar menyatakan bahwa suatu nama akun valid. Untuk contoh ini, pemeriksaan awal yang setara adalah pgrep -a -u alice -x myworker, dengan alice diganti sesuai target. Tambahkan batas pengguna pada pemeriksaan dan tindakan, bukan pada salah satunya saja.

Periksa hasil pengiriman sinyal

Urutan berikut berlaku setelah Anda mengidentifikasi pekerjaan uji bernama demo-worker yang memang hendak dihentikan. Jalankan satu baris, baca hasilnya, lalu lanjutkan ke baris berikutnya; perintah ini bukan urutan untuk ditempel tanpa pemeriksaan target.

pgrep -a -x demo-worker
pkill -TERM -x demo-worker
pgrep -a -x demo-worker
  1. Baris pertama dapat menampilkan PID dan perintah pekerjaan uji yang cocok. Jika target berbeda dari yang dimaksud, berhenti dan perbaiki kriteria.
  2. Baris kedua meminta penghentian dengan SIGTERM secara eksplisit. Pkill biasanya tidak mencetak daftar PID saat berhasil.
  3. Baris ketiga mencari kembali kecocokan. Jika proses sudah selesai dan tidak ada kecocokan lain, hasilnya kosong. Jika masih terlihat, periksa apakah proses belum selesai atau justru merupakan instans yang berbeda.

Pengiriman sinyal tidak menjamin penghentian langsung. Program dapat mempunyai penangan SIGTERM untuk menyelesaikan pekerjaan, menutup berkas, atau mengabaikan permintaan itu. Beri waktu sesuai perilaku aplikasinya lalu periksa kembali, termasuk PID dan perintah. Jangan langsung mengganti permintaan tersebut dengan SIGKILL hanya karena satu pemeriksaan masih menampilkan baris.

Opsi utama

Opsi Kegunaan
-x Meminta pola cocok dengan seluruh nama proses; bersama -f, dengan seluruh baris perintah.
-u PENGGUNA Membatasi target menurut identitas pengguna efektif.
-f Mencocokkan pola dengan seluruh baris perintah, termasuk argumen.
-TERM Mengirim SIGTERM secara eksplisit.
-e Menampilkan nama dan PID target pengiriman pada implementasi yang mendukungnya.

PENGGUNA adalah penanda nama atau nomor pengguna. Pencocokan memakai ekspresi reguler, sehingga -x membatasi kecocokan penuh tetapi tidak mengubah pola menjadi teks literal. -f dapat cocok dengan teks pada argumen pekerjaan lain. Pilihan dan perilakunya dijelaskan dalam manual pkill dan pgrep dari procps-ng.

Status berhasil berbeda dari proses selesai

Periksa status segera setelah pkill, misalnya dengan printf '%s\n' "$?", sebelum menjalankan perintah pemeriksaan lain. Pada procps-ng, status 0 berarti sedikitnya satu proses cocok dan berhasil dikirimi sinyal. Itu tidak menyatakan bahwa setiap target telah berhenti. Status 1 berarti tidak ada kecocokan atau tidak ada target yang berhasil dikirimi sinyal; status 2 berarti kesalahan sintaks dan 3 kesalahan fatal.

Jika perintah ditolak karena izin, pisahkan hak melihat proses dari hak mengirim sinyal. Pada Linux, izin pengiriman terkait identitas proses dan hak khusus yang relevan. Aturan ini dijelaskan dalam manual pengiriman sinyal Linux. Meningkatkan hak tanpa mempersempit target dapat memperluas pekerjaan yang terpengaruh.

Pilih penghentian yang sesuai aplikasinya

SIGTERM memberi kesempatan kepada aplikasi yang memasang penangan sinyal untuk melakukan pembersihan. Sebaliknya, SIGKILL tidak dapat ditangkap, diblokir, atau diabaikan, sehingga pembersihan di penangan aplikasi tidak berjalan. Perbedaan disposisi sinyal dijelaskan dalam manual sinyal Linux.

Utamakan prosedur normal aplikasi atau pengelola layanan jika tersedia. Sebelum mengirim sinyal lanjutan, periksa kembali identitas target karena proses dapat selesai, dimulai ulang, dan memakai PID yang berbeda. Menghentikan proses yang salah tidak selalu dapat dibatalkan dengan memulai proses itu kembali.

FAQ

Apa perbedaan pkill dan pgrep?

Pgrep menemukan PID yang cocok dengan kriteria. Pkill mengirim sinyal ke proses yang cocok pada saat dijalankan. Karena itu, gunakan pgrep untuk membaca target sebelum mempertimbangkan tindakan dengan pkill.

Apakah pkill tanpa keluaran berarti penghentian sudah selesai?

Tidak. Pkill biasanya tidak mencetak daftar PID pada pengiriman biasa. Baca status keluar untuk hasil pengiriman, kemudian periksa keadaan aplikasi atau proses secara terpisah untuk memastikan penghentian.