Pada bab sebelumnya kita telah belajar memahami proses, mulai dari PID hingga cara melihat proses yang sedang berjalan. Kini kita akan belajar mengendalikan proses tersebut. Kemampuan ini penting ketika sebuah aplikasi berhenti merespons, ketika sysadmin perlu menjalankan tugas di latar belakang, atau ketika perlu mengatur prioritas sebuah proses. Bab ini membahas tiga kemampuan utama: mengirim signal untuk menghentikan proses, menjalankan proses di background, dan mengatur prioritas proses.
29.1 Mengirim Signal ke Proses
Proses di Linux dapat menerima signal, yaitu pesan kecil yang dikirim kernel atau pengguna untuk memberitahu proses melakukan sesuatu, misalnya berhenti. Signal memiliki nomor dan nama standar, meskipun yang paling sering kita gunakan hanya beberapa di antaranya.
| Signal | Nomor | Keterangan |
|---|---|---|
| SIGHUP | 1 | Memberi tahu proses bahwa terminal induknya telah ditutup, sering dipakai untuk meminta service memuat ulang konfigurasi |
| SIGINT | 2 | Sinyal interupsi, sama seperti menekan Ctrl+C |
| SIGKILL | 9 | Memaksa proses berhenti seketika dan tidak dapat diabaikan |
| SIGTERM | 15 | Meminta proses berhenti secara sopan (default signal kill) |
| SIGSTOP | 19 | Menghentikan sementara proses (tidak dapat diabaikan) |
| SIGCONT | 18 | Melanjutkan kembali proses yang dihentikan sementara |
Untuk melihat daftar lengkap seluruh signal beserta nomornya, gunakan kill -l.
kill -lPerintah utama untuk mengirim signal adalah kill, killall, dan pkill.
29.1.1 kill: Mengirim Signal (Default: SIGTERM)
Perintah kill mengirim signal ke sebuah proses berdasarkan PID-nya. Secara bawaan, kill mengirim signal SIGTERM (terminate), yang meminta proses untuk berhenti secara sopan.
kill 1234SIGTERM memberi kesempatan proses untuk membersihkan diri, misalnya menyimpan data atau menutup file, sebelum benar-benar berhenti. Karena itu, SIGTERM adalah cara yang paling aman untuk menghentikan proses.
Untuk mengetahui PID sebuah proses, kita dapat menggunakan ps seperti yang telah dipelajari sebelumnya, atau pidof yang langsung mengembalikan PID berdasarkan nama program.
pidof firefoxPID yang dikembalikan oleh pidof bisa langsung kita gunakan sebagai argumen untuk kill.
29.1.2 kill -9 (SIGKILL): Memaksa Menghentikan Proses
Ketika sebuah proses tidak merespons SIGTERM, kita dapat memaksanya berhenti menggunakan signal SIGKILL, yang biasanya ditulis sebagai kill -9.
kill -9 1234SIGKILL tidak dapat diabaikan oleh proses dan langsung menghentikannya secara paksa. Karena proses tidak diberi kesempatan membersihkan diri, gunakan kill -9 hanya sebagai pilihan terakhir setelah SIGTERM tidak berhasil. Data yang belum disimpan oleh proses tersebut kemungkinan besar akan hilang.
Di lapangan, sysadmin sering menemukan dua pesan error saat mengirim signal. Pesan kill: (1234): No such process berarti PID tersebut sudah tidak ada, biasanya karena proses sudah berhenti lebih dulu. Pesan kill: (1234): Operation not permitted berarti proses tersebut milik pengguna lain sehingga perintah kill perlu dijalankan dengan sudo. Untuk memastikan proses benar-benar berhenti setelah signal dikirim, jalankan ps -p 1234; jika tidak ada baris output yang muncul, berarti proses sudah tidak berjalan.
kill -9 juga tidak berguna untuk proses berstatus zombie, karena proses tersebut sebenarnya sudah selesai dieksekusi dan hanya menunggu parent proses membaca exit status-nya (lihat pembahasan state proses pada bab sebelumnya). Zombie yang menumpuk biasanya diatasi dengan menghentikan atau me-restart parent proses-nya, bukan dengan mengirim signal ke proses zombie itu sendiri.
29.1.3 killall dan pkill: Menghentikan Proses Berdasarkan Nama
Jika kita tidak ingin mencari PID terlebih dahulu, gunakan killall atau pkill untuk menghentikan proses berdasarkan namanya.
killall firefoxpkill firefoxkillall menghentikan seluruh proses yang cocok dengan nama persis, sedangkan pkill lebih fleksibel karena mendukung pencocokan pola. Keduanya memudahkan kita menghentikan aplikasi tanpa perlu repot mencari PID-nya, dan keduanya juga menerima opsi -9 untuk mengirim SIGKILL, misalnya pkill -9 firefox.
Berhati-hatilah menggunakan pkill karena pencocokan pola yang terlalu longgar bisa ikut menghentikan proses yang tidak dimaksud. Contoh klasik: menjalankan pkill ssh di server remote bisa memutus koneksi SSH kita sendiri, karena proses sshd yang sedang melayani sesi tersebut juga cocok dengan pola "ssh". Sebelum benar-benar mengeksekusi pkill, cek dulu proses mana saja yang cocok dengan pola menggunakan pgrep -l, perintah sejenis pkill yang hanya menampilkan daftar proses tanpa mengirim signal, misalnya pgrep -l ssh.
29.2 Menjalankan Proses di Background
Secara bawaan, perintah yang kita jalankan di terminal berjalan di foreground dan menguasai terminal sampai selesai. Kita dapat menjalankan proses di background agar terminal tetap bebas digunakan untuk perintah lain.
29.2.1 &: Menjalankan di Background
Tambahkan tanda & di akhir perintah untuk menjalankannya di background.
sleep 300 &Perintah sleep 300 di atas akan berjalan di latar belakang selama lima menit, sementara terminal langsung mengembalikan kendali kepada kita.
29.2.2 Ctrl+Z: Menghentikan Sementara Proses Foreground
Selain menjalankan perintah langsung ke background dengan &, kita juga dapat memindahkan proses yang sedang berjalan di foreground ke background. Caranya, tekan Ctrl+Z saat proses sedang berjalan. Kombinasi tombol ini mengirim signal SIGTSTP yang menghentikan proses sementara (masuk ke state Stopped, sebagaimana dibahas pada bab sebelumnya) dan mengembalikan kendali terminal kepada kita.
^Z
[1]+ Stopped nano catatan.txtProses yang dihentikan dengan Ctrl+Z tidak benar-benar berjalan di background, melainkan sekadar dibekukan. Untuk benar-benar melanjutkannya di background, gunakan perintah bg yang akan dibahas berikutnya.
29.2.3 jobs: Melihat Daftar Background Jobs
Untuk melihat proses yang sedang berjalan di background pada sesi terminal kita, gunakan jobs.
jobsPerintah ini menampilkan daftar pekerjaan beserta nomor dan statusnya, misalnya Running untuk job yang sedang aktif di background atau Stopped untuk job yang dibekukan dengan Ctrl+Z.
29.2.4 fg dan bg: Memindahkan Proses
Kita dapat memindahkan proses antara foreground dan background. Gunakan fg untuk membawa sebuah job kembali ke foreground, dan bg untuk melanjutkan job yang berstatus Stopped agar berjalan kembali di background.
fg %1bg %1Angka %1 merujuk pada nomor job yang ditampilkan oleh jobs. Alur yang umum digunakan adalah menjalankan perintah, menekan Ctrl+Z ketika ingin mengembalikan kendali terminal, lalu mengetik bg agar proses tersebut tetap berjalan di background.
29.2.5 nohup: Proses Tetap Berjalan Setelah Logout
Biasanya, proses yang dijalankan di terminal akan ikut berhenti ketika kita menutup terminal atau keluar dari sesi, karena proses tersebut menerima signal SIGHUP. nohup ("no hang up") mencegah hal tersebut sehingga proses tetap berjalan meskipun kita logout.
nohup perintah &nohup akan menyimpan keluaran proses ke file bernama nohup.out di direktori aktif. Perintah ini sangat berguna untuk tugas yang memakan waktu lama dan perlu tetap berjalan setelah kita meninggalkan sesi.
29.3 Prioritas Proses
Kernel menjadwalkan waktu prosesor untuk setiap proses berdasarkan prioritasnya. Prioritas ini dapat kita atur menggunakan nice dan renice.
29.3.1 nice: Menjalankan Proses dengan Prioritas Tertentu
Perintah nice menjalankan sebuah proses dengan nilai niceness tertentu. Nilai niceness berkisar antara -20 (prioritas tertinggi) hingga 19 (prioritas terendah), dengan nilai default 0 untuk proses baru. Nilai yang lebih besar berarti proses lebih "ramah" karena memberi kesempatan kepada proses lain.
nice -n 10 perintahPengguna biasa hanya dapat menaikkan nilai niceness (menurunkan prioritas). Menurunkan nilai niceness untuk menaikkan prioritas memerlukan hak administratif.
29.3.2 renice: Mengubah Prioritas Proses yang Berjalan
Untuk mengubah prioritas proses yang sudah berjalan, gunakan renice.
sudo renice -n 5 -p 1234Perintah di atas mengubah nilai niceness proses dengan PID 1234 menjadi 5. Prioritas berguna ketika ada proses yang memakan banyak sumber daya dan perlu dibatasi, atau sebaliknya ingin memberi prioritas lebih pada proses yang penting. Kita dapat memverifikasi nilai niceness yang baru dengan melihat kolom NI pada ps -eo pid,ni,comm atau pada tampilan top/htop.
Contoh penggunaan nyata: ketika proses backup atau kompilasi besar di background membuat sistem terasa berat dan lambat merespons, sysadmin bisa menaikkan nilai niceness proses tersebut dengan renice agar prosesor lebih mengutamakan aplikasi lain yang sedang aktif dipakai, tanpa perlu menghentikan proses backup atau kompilasi itu sendiri.
Mengelola proses adalah keterampilan dasar yang akan sering kita gunakan. Melalui pemahaman terhadap signal, kill, killall, pkill, serta cara menjalankan proses di background dan mengatur prioritasnya, kita dapat mengendalikan aplikasi yang berjalan di sistem dengan lebih baik. Pada bab berikutnya, kita akan mengenal systemd, sistem init modern yang mengelola service dan log di Ubuntu 26.04 LTS maupun Fedora Workstation 44.

