Perintah kill Linux: kirim sinyal ke PID dan verifikasi hasilnya

Perintah kill mengirim sinyal ke process ID (PID), yaitu nomor identitas proses, atau ke pekerjaan shell yang dikenali shell tersebut. Tanpa sinyal yang ditentukan, Bash memakai SIGTERM untuk meminta penghentian; nama kill tidak berarti bahwa setiap pemanggilan langsung memaksa proses berhenti. Respons proses bergantung pada jenis sinyal dan programnya.

Di Bash, kill tersedia sebagai perintah bawaan shell. Gunakan prosedur penghentian normal aplikasi atau layanan terlebih dahulu bila tersedia. Jika memang perlu mengirim sinyal, periksa target terbaru, kirim sinyal yang sesuai, lalu verifikasi keadaan proses secara terpisah dari hasil pengiriman.

Sintaks dan implementasi yang dipakai

kill [-SINYAL] PID...

SINYAL adalah penanda nama sinyal, sedangkan PID diganti nomor proses yang dituju. Tanda titik-titik berarti lebih dari satu target dapat disebutkan; setiap target perlu diperiksa. Contoh di sini memakai PID positif untuk satu proses, bukan sasaran kelompok proses.

Periksa type kill dan help kill pada Bash. Perintah bawaan Bash dan program kill eksternal dapat mendukung opsi yang berbeda. Perilaku bawaan dan notasi pekerjaan shell dijelaskan pada bagian kill dalam manual GNU Bash. Nomor pekerjaan shell merupakan konteks shell itu, bukan nomor PID sistem.

Siapkan satu proses uji dan periksa PID

Angka 1234 dan 12345 dalam contoh berikut adalah nomor ilustratif. Untuk percobaan dengan proses milik sendiri, Anda dapat menyiapkan pekerjaan tidur sementara pada shell yang sama:

  1. Jalankan sleep 300 & untuk memulai pekerjaan uji yang menunggu hingga 300 detik.
  2. Segera jalankan pid_uji=$! untuk menyimpan PID pekerjaan latar belakang terakhir.
  3. Baca nomornya dengan printf '%s\n' "$pid_uji", lalu gunakan nomor itu sebagai pengganti 1234 atau 12345 pada contoh. Jika pekerjaan sudah selesai, buat pekerjaan uji baru dan baca PID baru.

Anda tidak perlu hak administrator untuk proses uji milik sendiri. Periksa pengguna, status, dan perintah target:

ps -p 1234 -o pid,user,stat,cmd

Hasil yang diharapkan adalah baris proses uji dengan PID yang Anda pilih dan perintah sleep beserta argumennya. Jika nomor, pengguna, atau perintah tidak sesuai, jangan lanjutkan ke pengiriman sinyal. Panduan ps untuk PID, pengguna, dan status menjelaskan kolom tersebut.

Kirim SIGTERM dan periksa hasil

kill -TERM 1234

Ganti 1234 dengan PID proses uji yang baru diperiksa. -TERM menuliskan SIGTERM secara eksplisit; tanpa penentuan sinyal, Bash juga memakai SIGTERM. Saat pengiriman berhasil, biasanya tidak ada keluaran. Periksa status segera setelah perintah, misalnya dengan printf '%s\n' "$?", sebelum perintah lain mengubah nilai status.

Status pengiriman yang berhasil tidak berarti aplikasi telah selesai berhenti. Program dapat menangani SIGTERM untuk menutup berkas atau menyelesaikan pekerjaan, dan dapat pula mengabaikannya. Keadaan proses perlu diperiksa sesudahnya.

Lihat nama sinyal yang didukung

kill -l

-l mencetak nama sinyal pada implementasi yang dipakai dan tidak mengirim sinyal ke proses. Nama sinyal lebih jelas dibaca daripada mengandalkan nomor yang dapat berbeda menurut platform. Gunakan bantuan lokal untuk bentuk pemanggilan yang didukung.

Alur pemeriksaan, pengiriman, dan pemeriksaan ulang

Berikut alur lengkap pemeriksaan, pengiriman, dan pemeriksaan ulang untuk PID ilustratif 12345. Jika pekerjaan uji sudah dihentikan pada contoh sebelumnya, mulai sleep baru dan simpan PID barunya terlebih dahulu. Ganti setiap kemunculan 12345 dengan PID uji yang sama, dan jalankan satu baris setelah memeriksa hasil baris sebelumnya:

ps -p 12345 -o pid,stat,comm
kill -TERM 12345
ps -p 12345 -o pid,stat,comm

Pada pemeriksaan pertama, target yang dimaksud seharusnya terlihat. Setelah penghentian selesai dan proses sudah tidak tercatat, pemeriksaan terakhir dapat menampilkan judul kolom saja tanpa baris target. Jika masih ada baris, baca status dan identitasnya; jangan berasumsi bahwa sinyal yang berhasil dikirim pasti sudah menyelesaikan penghentian.

Untuk pekerjaan sleep yang dibuat oleh shell ini, wait "$pid_uji" dapat dipakai setelah pengiriman untuk menunggu serta mengambil status berakhirnya pekerjaan anak tersebut. Status bukan nol dapat terjadi karena pekerjaan berakhir akibat sinyal. Wait hanya berlaku bagi pekerjaan anak yang dikenal shell tersebut, bukan untuk sembarang PID.

Sinyal dan pemeriksaan utama

Bentuk Makna
-TERM Meminta penghentian dengan SIGTERM; aplikasi dapat memasang penangannya.
-INT Mengirim sinyal interupsi SIGINT ke target yang disebutkan.
-HUP Mengirim sinyal hangup; responsnya mengikuti program, bukan selalu memuat ulang konfigurasi.
-KILL Mengirim SIGKILL yang tidak dapat ditangkap, diblokir, atau diabaikan.
-0 Memeriksa keberadaan dan izin pengiriman tanpa mengirim sinyal.

SIGTERM memberi kesempatan untuk pembersihan jika program memasang penangan yang sesuai. SIGKILL tidak menjalankan penangan pembersihan milik aplikasi, sehingga dapat memutus penulisan atau pekerjaan yang belum selesai. Definisi dan respons bawaan sinyal dapat diperiksa dalam manual sinyal Linux.

SIGINT berkaitan dengan interupsi seperti yang biasa diminta melalui terminal, tetapi mengirimnya ke satu PID berbeda cakupan dari interupsi terminal yang ditujukan ke kelompok proses latar depan. Demikian pula, gunakan HUP untuk memuat ulang konfigurasi hanya jika dokumentasi aplikasi memang menyatakannya.

Apa arti kill -0 dan kegagalan izin?

kill -0 PID, dengan PID diganti nomor sebenarnya, tidak mengirim sinyal. Keberhasilan pemeriksaan itu bukan pengujian kesehatan layanan atau bukti bahwa proses sedang menyelesaikan pekerjaan. Sebaliknya, kegagalan dapat berarti proses tidak ada atau Anda tidak mempunyai izin mengirim sinyal; baca pesan kesalahan agar keduanya tidak tercampur.

Aturan PID dan izin pengiriman pada Linux dijelaskan dalam manual sistem pengiriman sinyal kill. Target 0 dan nilai negatif mempunyai makna kelompok atau cakupan khusus; jangan menggantikan contoh PID positif dengan nilai tersebut untuk percobaan satu proses.

PID dapat dipakai kembali setelah proses berakhir. Nomor dari catatan lama dapat menunjuk pekerjaan lain, sehingga periksa nomor dan perintah yang terbaru sebelum pengiriman lanjutan. Untuk layanan, periksa juga log dan prosedur penghentian normalnya.

FAQ

Mengapa proses masih terlihat setelah kill?

Program dapat sedang menangani SIGTERM, mengabaikannya, atau masih melalui proses penghentian. Periksa status, identitas target, dan log aplikasinya. Pengiriman sinyal yang berhasil dan penghentian aplikasi merupakan dua hasil yang berbeda.

Apakah kill tanpa opsi sama dengan kill -KILL?

Tidak. Pada perintah bawaan Bash, tanpa sinyal yang ditentukan berarti SIGTERM. SIGKILL harus dipilih secara eksplisit dan dapat melewati pembersihan aplikasi.