Program apa pun yang sedang berjalan di sistem berperan sebagai proses, lengkap dengan nomor identitas yang disebut PID (process identifier). Topik ini membahas cara memeriksa proses dari sisi terminal menggunakan ps, top, dan pgrep, lalu cara mengirimkan sinyal ke proses tertentu melalui kill secara terkendali. Penguasaan ketiga alat inspeksi tersebut membuat keputusan pengiriman sinyal tidak lagi ditebak, karena penyebab dan akibatnya terlihat jelas.
PID dan identitas proses#
Shell itu sendiri adalah sebuah proses, sehingga memiliki PID yang dapat dilihat melalui parameter khusus $$. Perintah ps menampilkan potret proses pada saat ia dipanggil. Dengan opsi -p, ps dipakai memeriksa satu PID tertentu, sedangkan opsi -o comm= memilih kolom nama program sekaligus menghapus baris judulnya. Kombinasi ini menjadi cara paling ringkas untuk membuktikan identitas sebuah proses.
ps -o comm= -p $$bashKeluarannya berisi satu kata, yaitu bash, karena proses yang menjalankan blok tersebut memang shell bash. Nilai $$ inilah yang biasa dipakai skrip untuk merujuk dirinya sendiri, misalnya ketika membuat nama berkas sementara yang unik. Setiap proses baru yang diluncurkan menerima nomor yang belum dipakai, sehingga PID selalu unik pada satu titik waktu. Identitas yang sama juga dipakai sistem operasi untuk mencatat pemilik, pemakaian memori, dan waktu proses.
Melihat proses dengan ps#
Tanpa argumen, ps hanya menampilkan proses yang berjalan pada sesi terminal yang sama. Opsi -C NAMA mempersempit daftar ke program dengan nama yang ditentukan, dan kombinasi dengan -o comm= menghasilkan keluaran yang stabil untuk dibandingkan. Blok berikut meluncurkan sleep 30 di background, lalu mencarinya berdasarkan nama programnya.
sleep 30 &
sleep 0.2
ps -C sleep -o comm=
kill %1
waitsleepSatu baris sleep muncul karena saat itu memang hanya ada satu proses sleep milik sesi. Jeda sleep 0.2 sebelum ps memberi waktu bagi shell untuk menyelesaikan peluncuran prosesnya, sehingga pencarian tidak berlangsung sebelum proses selesai dibuat. Untuk melihat seluruh proses sistem, ps menyediakan bentuk ps aux dan ps -e, yang keluarannya panjang dan bergantung pada isi mesin sehingga tidak didemokan di sini.
Memantau secara berkala dengan top#
Berbeda dari ps yang mencetak potret sekali lalu berhenti, top berjalan terus sebagai layar penuh dan memperbarui isinya setiap beberapa detik. Bagian atas layar menampilkan ringkasan sistem seperti waktu aktif, jumlah tugas, dan persentase pemakaian CPU, sedangkan tubuh tabelnya mendaftar proses satu baris per proses. Kolom yang paling sering dibaca adalah PID, pemilik proses, %CPU, %MEM, dan nama perintahnya. Menekan tombol q mengakhiri top.
Karena bersifat interaktif, top tidak menghasilkan keluaran yang cocok untuk blok Keluaran, sehingga blok berikut hanya menandai pemanggilannya. Dalam skrip, top dapat dijalankan dengan opsi -bn1 agar mencetak satu kali lalu berhenti, meskipun isinya tetap bergantung pada kondisi mesin saat itu.
# tidak-dijalankan
# top berjalan sebagai layar penuh yang terus diperbarui, sehingga keluarannya tidak stabil untuk blok Keluaran
topMencari proses dengan pgrep#
Perintah pgrep menjawab pertanyaan yang lebih spesifik, yaitu PID apa saja yang cocok dengan sebuah pola nama. Opsi -c mengganti daftar PID dengan hitungannya, sedangkan opsi -f memperluas pencarian ke seluruh baris perintah, bukan hanya nama programnya. Kombinasi -c dan -f menjadi cara cepat untuk menghitung proses yang sedang menjalankan perintah tertentu.
sleep 30 &
sleep 0.2
pgrep -c -f "sleep 30"
kill %1
wait1Hitungan 1 muncul karena pola sleep 30 hanya mengenai proses sleep yang baru diluncurkan. Pencocokan dengan -f memeriksa baris perintah lengkap, sehingga pola yang terlalu pendek dapat mengenai proses lain yang tidak disangka. Pola sebaiknya ditulis selengkap mungkin, misalnya sleep 30 daripada hanya sleep.
Mengirim sinyal dengan kill#
Sesuai keterangan pada halaman manualnya, kill mengirim sinyal ke proses yang ditunjuk, dan mematikan hanyalah salah satu akibat yang mungkin. Tanpa opsi tambahan, kill mengirim SIGTERM, yaitu sinyal nomor 15 yang meminta proses menghentikan diri dengan tertib. Proses yang diberi kesempatan ini dapat menutup berkas log, menyelesaikan penulisan terakhir, lalu berhenti. Sinyal yang lain dikirim dengan opsi, misalnya kill -9 untuk SIGKILL yang tidak dapat ditangkap dan tidak dapat ditolak sama sekali.
Proses yang berhenti karena sinyal melaporkan kode keluar 128 ditambah nomor sinyalnya. Blok berikut mematikan job background dengan SIGTERM, lalu membaca kode keluarnya melalui wait.
sleep 30 &
kill %1
wait $!
echo "kode keluar setelah SIGTERM: $?"kode keluar setelah SIGTERM: 143Nilai 143 terdiri atas 128 ditambah 15, yaitu nomor sinyal SIGTERM. Perhitungan yang sama berlaku untuk SIGKILL bernomor 9, yang menghasilkan kode keluar 137. Pada proses yang dituntaskan SIGKILL, shell mencetak baris notifikasi Killed yang memuat PID, sehingga demo SIGKILL tidak ditampilkan dan cukup dihitung dari pola tersebut.
Kesalahan umum#
Kesalahan pada inspeksi dan pengiriman sinyal biasanya berupa keputusan yang diambil terlalu cepat. Daftar berikut memuat kekeliruan yang paling sering ditemui beserta perbaikannya.
- Menjadikan
kill -9kebiasaan pertama. Proses tidak diberi kesempatan menutup berkasnya, sehingga log terpotong atau cadangan setengah jadi. Kirim SIGTERM lebih dahulu, tunggu sebentar, lalu gunakan SIGKILL sebagai upaya terakhir. - Menganggap kill pasti berhasil. SIGTERM boleh ditolak atau diabaikan oleh proses, sehingga prosesnya bisa tetap hidup. Periksa kembali dengan
pgrep -csetelah mengirim sinyal. - Menulis pola
-fyang terlalu pendek pada pgrep. Polasleepmengenaisleep 5dansleep 30sekaligus, sehingga hitungannya menyesatkan. Tulis pola selengkap baris perintah yang dimaksud. - Membaca ps tanpa memahami kolomnya. Tanda
=pada-o comm=menghapus judul kolom, sehingga keluaran satu kolom perlu ditafsirkan sebagai nama program.
Ringkasan#
$$menyimpan PID shell saat ini, danps -o comm= -p PIDmenampilkan nama program dari sebuah PID.ps -C NAMAmenyaring proses berdasarkan nama program, sedangkanpgrep -c -f POLAmenghitung kecocokan pada baris perintah.topmemantau proses secara berkelanjutan dalam layar penuh dan diakhiri dengan tombol q.killmengirim sinyal dengan SIGTERM sebagai pilihan bawaan, dan proses yang mati karena sinyal N melaporkan kode keluar 128+N.
Referensi#
- ps(1) — man7.org — Merinci opsi pemilihan proses seperti -p dan -C beserta penentu format -o.
- top(1) — man7.org — Menjelaskan tampilan layar penuh top dan kolom-kolom pemantauannya.
- pgrep(1) — man7.org — Mendokumentasikan pencarian proses dengan pola nama serta opsi -c dan -f.
- GNU Bash Reference Manual — Free Software Foundation — Mencakup kill sebagai perintah bawaan shell dan parameter khusus $$.