Perintah killall Linux: kirim sinyal berdasarkan nama proses

Perintah killall pada Linux mengirim sinyal ke proses yang namanya cocok dengan nama yang diberikan. Pada implementasi psmisc, sinyal bawaannya adalah SIGTERM, yaitu permintaan penghentian; jika beberapa proses mempunyai nama yang sama, semuanya dapat menjadi sasaran.

Panduan ini membahas killall dari psmisc, kumpulan utilitas Linux yang menggunakan informasi proses dari /proc. Nama perintah yang sama pada sistem Unix lain dapat mempunyai perilaku berbeda. Periksa implementasi lokal dengan killall --version dan man killall sebelum memakai contoh ini.

Sintaks dasar dan prasyarat

killall [OPSI] NAMA...

OPSI dan NAMA merupakan penanda yang harus diganti. Titik-titik berarti Anda dapat memberikan lebih dari satu nama. Nama adalah nama proses yang dikenali killall, bukan sembarang teks yang terlihat dalam argumen perintah. Pencocokan ekspresi reguler harus diminta secara khusus dengan -r.

Contoh myworker dan demo-worker di bawah merupakan nama ilustratif, bukan program yang otomatis tersedia. Gunakan hanya proses uji milik sendiri yang memang sudah dijalankan dan boleh dihentikan. Jika tidak mempunyai program uji dengan nama tersebut, baca contoh sebagai pola pemakaian dan jangan menggantinya dengan nama layanan yang sedang digunakan orang lain.

Periksa proses sebelum mengirim sinyal

Mulailah dengan melihat process ID (PID), yaitu nomor identitas proses, serta baris perintah calon sasaran:

pgrep -a -x myworker

Pada pgrep dari procps-ng, -a menampilkan baris perintah dan -x meminta kecocokan seluruh nama. Pola pgrep tetap berupa ekspresi reguler; jangan menganggapnya selalu mempunyai aturan pencocokan yang identik dengan killall. Untuk nama sederhana myworker, periksa bahwa setiap hasil benar-benar merupakan instans yang ingin dihentikan.

Hasil yang diharapkan adalah satu atau beberapa baris PID dan perintah program uji. Tidak adanya keluaran tidak membuktikan bahwa aplikasi sehat atau sudah selesai bekerja. Periksa juga pemilik proses melalui ps -p PID -o pid,user,comm,args, dengan PID diganti nomor dari hasil pgrep. Panduan ps untuk identitas proses menjelaskan kolom tersebut.

Pemeriksaan dan pengiriman merupakan dua langkah terpisah. Proses dapat berakhir, muncul, atau berubah nama di antaranya; hasil pemeriksaan sebelumnya bukan jaminan bahwa daftar sasaran akan tetap sama.

Kirim SIGTERM ke nama yang sudah diperiksa

killall -TERM myworker

-TERM memilih SIGTERM secara eksplisit. Pada psmisc, menghilangkan penentuan sinyal juga menggunakan SIGTERM. Perintah ini dapat memengaruhi semua proses bernama myworker yang dapat diberi sinyal oleh pengguna yang menjalankannya, sehingga jangan memakainya jika hanya satu instans tertentu yang boleh dihentikan. Untuk satu PID yang sudah diperiksa, pertimbangkan pengiriman sinyal dengan kill.

Saat berhasil, killall biasanya tidak mencetak keluaran. Baca status keluar segera sesudahnya, misalnya dengan printf '%s\n' "$?". Keberhasilan pengiriman tidak sama dengan bukti bahwa seluruh aplikasi telah selesai berhenti; lakukan pemeriksaan ulang dan baca keadaan proses serta log aplikasinya.

Batasi nama dan pengguna sekaligus

killall -u alice myworker

Contoh ini memilih nama myworker di antara proses milik pengguna alice dan memakai SIGTERM bawaan. Ganti alice dengan pengguna uji yang sebenarnya, lalu periksa pemilik dan nama proses terlebih dahulu. Batas pengguna mempersempit sasaran, tetapi tidak memberi hak tambahan untuk mengirim sinyal. Jangan menambahkan sudo hanya untuk melewati kegagalan izin.

Pertahankan nama proses jika maksud Anda hanya menghentikan program tertentu. Pada psmisc, opsi -u juga dapat digunakan tanpa nama perintah, sehingga menghapus myworker dari contoh akan memperluas cakupannya.

Periksa kembali ketika nama yang sama dipakai beberapa instans

Berikut urutan pemeriksaan lalu permintaan penghentian. Ganti demo-worker dengan nama program uji yang sudah Anda identifikasi. Jalankan satu baris, baca hasilnya, lalu lanjutkan hanya jika seluruh sasaran memang boleh dihentikan.

pgrep -a -x demo-worker
killall -TERM demo-worker

Baris pertama seharusnya menampilkan PID dan perintah instans yang dimaksud. Baris kedua mengirim SIGTERM dan biasanya tidak mengeluarkan teks ketika berhasil. Setelah memberi kesempatan bagi program untuk menyelesaikan penghentian, jalankan kembali pgrep -a -x demo-worker.

Jika tidak ada lagi proses bernama tersebut, pgrep tidak menampilkan baris hasil. Jika masih ada hasil, periksa PID, identitas, status, serta respons program terhadap SIGTERM sebelum mengambil tindakan lanjutan. Layanan yang dikelola oleh pengelola layanan sebaiknya dihentikan melalui prosedur pengelolanya; pada layanan systemd, gunakan systemctl stop NAMA_LAYANAN hanya setelah memastikan unit yang benar dan izin yang diperlukan.

Opsi utama

Opsi Kegunaan
-s SINYAL Memilih sinyal yang dikirim, misalnya TERM.
-u PENGGUNA Membatasi sasaran pada proses milik pengguna yang ditentukan.
-i Meminta konfirmasi sebelum pengiriman.
-v Melaporkan keberhasilan pengiriman sinyal.
-w Menunggu proses sasaran tidak lagi ada; bukan batas waktu tunggu.

Konfirmasi interaktif membantu memeriksa sasaran, tetapi tidak menggantikan pemeriksaan nama dan pemilik sebelumnya. Opsi -v melaporkan pengiriman, bukan hasil akhir pekerjaan aplikasi.

Batas pencocokan nama dan penantian

Nama panjang memerlukan perhatian tambahan. Manual psmisc menjelaskan bahwa bila nama lebih dari 15 karakter tidak tersedia secara lengkap, pencocokan dapat memakai 15 karakter pertamanya. Opsi -e melewati entri semacam itu; opsi tersebut tidak menjadikan informasi nama yang hilang tersedia kembali. Periksa manual versi yang terpasang dan hindari mengandalkan nama panjang yang mirip.

Opsi -w dapat menunggu tanpa batas ketika sinyal diabaikan, tidak menyebabkan penghentian, atau proses tetap menjadi zombie, yaitu catatan proses yang sudah berakhir tetapi statusnya belum diambil oleh induknya. Pemindaian penantian juga mempunyai keterbatasan ketika PID dipakai kembali. Karena itu, -w bukan pengganti pemeriksaan keadaan proses maupun mekanisme batas waktu aplikasi.

Perbedaan pencocokan, opsi, dan keterbatasan tersebut dijelaskan dalam manual killall psmisc. Jangan membawa asumsi perilaku Linux ke implementasi killall pada sistem operasi lain.

FAQ

Apakah killall menghentikan semua proses pada sistem?

Pada psmisc Linux, nama yang diberikan menentukan sasaran. Semua instans dengan nama yang cocok dapat terpengaruh, sehingga cakupannya tetap dapat luas. Perilaku implementasi pada Unix lain perlu diperiksa secara terpisah.

Mengapa proses masih terlihat setelah killall berhasil?

SIGTERM merupakan permintaan yang dapat ditangani atau diabaikan program. Proses juga mungkin masih menyelesaikan penghentian atau tercatat sebagai zombie. Periksa identitas serta status terbaru dan log program; jangan menyimpulkan keadaan aplikasi hanya dari tidak adanya pesan kesalahan.