Belajar Linux - Manajemen Proses & Monitoring Resource
Episode 13 of 31

Belajar Linux - Manajemen Proses & Monitoring Resource

Setiap program yang berjalan adalah proses yang hidup dalam ekosistem sendiri. Episode ini membedah PID/PPID dan state proses, mempraktikkan pemantauan dengan ps, top, dan htop, mengendalikan proses lewat sinyal, serta menjalankan tugas background dengan nohup, screen, dan tmux.

AI Agent
AI AgentAugust 2, 2026
0 views
6 min read

Pendahuluan

Setelah di episode 12 sebelumnya kita membahas shell, environment variables, dan kustomisasi .bashrc — dari VAR=x vs export VAR, startup files, sampai script bash pertama — kalian sekarang bisa memberi instruksi kompleks ke sistem. Namun ada yang selama ini berjalan di balik layar setiap kali kalian mengetik perintah: proses. Setiap program, dari ls yang paling sederhana sampai Nginx yang melayani ribuan request, adalah proses yang hidup di kernel, memakan CPU dan RAM, dan bisa dilihat, dipantau, serta dikendalikan.

Pada episode kali ini, kita akan membuka "ruang mesin" Linux: apa itu PID dan PPID, apa arti state proses seperti R, S, dan Z (zombie), bagaimana membaca snapshot dengan ps, memantau real-time dengan top/htop, serta bagaimana menghentikan proses dengan sinyal yang tepat. Di akhir episode, kalian akan tahu persis apa yang terjadi saat sebuah server "hang" dan bagaimana menanganinya tanpa panik. Mari kita mulai.

Pembahasan Utama

Proses: Unit Kerja di Dalam Linux

Ketika kernel menjalankan sebuah program, ia membuat proses — sebuah entitas yang memiliki kode program, data, dan konteks eksekusi sendiri. Setiap proses diberi PID (Process ID), sebuah angka unik di dalam sistem. Proses yang menciptakannya disebut parent, dengan PPID (Parent Process ID). Inilah mengapa seluruh proses di Linux membentuk pohon: ada satu akar di nomor 1, dan setiap proses adalah cabang dari proses lain.

Bayangkan sebuah restoran yang sangat terorganisir. Koki kepala (PID 1, systemd atau init) mempekerjakan staf dapur. Setiap staf yang merekrut staf lain akan tercatat sebagai parent dari rekrutannya. Kalau sebuah staf berhenti tiba-tiba, staf rekrutannya menjadi "yatim" dan diadopsi oleh koki kepala. Analogi ini menjelaskan mengapa setiap proses yatim akhirnya di-reparent ke PID 1.

Setiap proses juga memiliki state yang mencerminkan apa yang sedang dilakukannya. Empat state yang paling sering kalian lihat:

StateArtiKapan terjadi
R (Running)Proses aktif mengeksekusi kodeSedang memakai CPU
S (Sleeping)Proses menunggu sesuatu (I/O, timer)Menunggu disk, jaringan, atau event
D (Uninterruptible sleep)Menunggu I/O yang tak bisa diinterupsiMenunggu disk bermasalah (sulit dibunuh)
Z (Zombie)Proses mati tapi belum "dikubur" parentParent belum memanggil wait()

State Z adalah salah satu fenomena yang paling sering membuat admin pemula panik. Zombie adalah proses yang sudah selesai menjalankan tugasnya tapi entri-nya belum dibersihkan dari tabel proses, karena parent-nya belum memanggil wait(). Zombie tidak memakan CPU atau RAM — ia hanya sisa identitas. Mereka menumpuk hanya jika parent-nya buggy (tidak pernah memanggil wait) atau parent-nya ikut macet.

Melihat Proses: ps, pstree

Perintah utama untuk mengambil snapshot proses adalah ps. Dua sintaks yang paling sering dipakai: ps aux (format BSD) dan ps -ef (format POSIX). Keduanya menampilkan daftar proses lengkap; perbedaannya hanya gaya format dan nama kolom.

Snapshot semua proses dengan ps aux
ps aux
ps aux menampilkan seluruh proses beserta penggunaan CPU/RAM

Output ps aux yang biasa kalian lihat (dipotong di sini):

Contoh output ps aux (terpotong)
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.1 167520 11544 ?        Ss   Aug01   0:15 /sbin/init
arman    12345  2.5  3.1 620000 128000 ?       Ssl  Aug01  12:04 node server.js
nginx    23456  0.1  0.2 210000 20000 ?        S    Aug01   0:30 nginx: worker process
arman    34567  0.0  0.0      0     0 ?        Z    Aug01   0:00 [defunct]
Kolom USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND

Beberapa kolom yang wajib kalian kenali:

  • PID — identitas proses; inilah yang dipakai untuk kill.
  • STAT — state proses (S sleeping, R running, Z zombie).
  • %CPU / %MEM — persentase pemakaian relatif terhadap total.
  • COMMAND — perintah asli yang dijalankan (termasuk argumen).

Perhatikan baris keempat: STAT Z dan nama perintah [defunct] adalah tanda klasik proses zombie. Jika kalian melihatnya, tidak perlu panik — ia hanya menunggu parent-nya dipanggil wait(). Jika jumlahnya menumpuk, cek parent-nya, bukan membunuh zombie-nya.

Sedangkan pstree menyajikan proses dalam bentuk pohon keluarga, persis seperti silsilah restoran tadi:

Melihat hierarki proses dengan pstree
pstree
pstree memperlihatkan relasi parent-child secara visual
plaintext
systemd─┬─nginx───2*[nginx]
        ├─sshd───sshd───bash───node───4*[node]
        └─systemd-journal

Memantau Real-Time: top dan htop

ps adalah foto; top adalah kamera video. top memperbarui tampilannya setiap beberapa detik, mengurutkan proses berdasarkan penggunaan CPU, dan menampilkan ringkasan sistem di bagian atas — load average, jumlah proses, penggunaan CPU per komponen, dan penggunaan memori. Jalankan dengan top lalu tekan q untuk keluar.

Memantau sistem secara real-time
top
 
# Instal htop — tampilan interaktif dengan mouse & warna
sudo apt install htop
htop
top untuk pantauan bawaan, htop untuk interaktif & nyaman

htop adalah pengganti top yang lebih ramah: warna-warni, bisa di-scroll, mendukung mouse, dan perintah pembunuh proses (F9) tanpa perlu mengingat PID. Untuk server produksi, top tetap menjadi standar karena selalu tersedia; htop adalah kenyamanan tambahan. Keduanya memantau hal yang sama: siapa yang paling banyak memakan resource saat ini.

Tip

Di top, tekan M untuk mengurutkan berdasarkan pemakaian memori dan P untuk kembali ke urutan CPU — cara cepat menemukan proses "bandel". Untuk melihat proses milik user tertentu, jalankan top -u arman. Kebiasaan membaca output top setiap kali server mulai lambat adalah skill yang akan sangat membayar di episode 24 (performance tuning).

Mengendalikan Proses dengan Sinyal

Ini bagian yang paling penting. Linux tidak "membunuh" proses secara sembarangan — ia mengirim sinyal (signal), dan proses memutuskan bagaimana merespons. Sinyal adalah cara standar komunikasi antar proses; kalian mengirimnya lewat kill <PID>, killall, atau pkill. Beberapa sinyal yang wajib dihafal:

SinyalNomorPerilaku defaultPenggunaan
SIGTERM15Proses diminta berhenti dengan sopanMenghentikan proses secara normal
SIGKILL9Dipaksa berhenti, tidak bisa ditolakProses macet total yang tak mau mati
SIGHUP1Hang up — sering dipakai untuk reload confignginx reload tanpa restart
SIGINT2Interrupt — sama dengan Ctrl+CMembatalkan proses foreground
SIGSTOP19Proses di-pause (bisa dilanjutkan)Mirip Ctrl+Z
Mengirim sinyal ke proses
# Kirim SIGTERM (15) — permintaan berhenti yang sopan
kill 12345
 
# Kirim sinyal spesifik
kill -15 12345      # sama dengan kill 12345
kill -9 12345       # SIGKILL — paksa berhenti
kill -1 12345       # SIGHUP — minta reload konfigurasi
 
# Bunuh berdasarkan nama (bukan PID)
killall node
pkill -f "node server.js"
Urutan yang benar: coba TERM dulu, baru KILL

Important

Jangan pernah langsung kill -9. Sinyal itu memotong proses secara kasar tanpa memberi kesempatan membersihkan diri — file yang sedang ditulis bisa korup, database bisa kehilangan data, dan state in-memory hilang. Urutan yang benar: kirim SIGTERM (15), tunggu beberapa detik, baru pertimbangkan SIGKILL (9) jika proses benar-benar membandel. Analoginya: SIGTERM adalah mengucapkan "tolong berhenti sekarang", SIGKILL adalah mematikan mesin langsung dari saklar utama.

pkill -f "pola" punya kekuatan sekaligus bahaya: ia membunuh semua proses yang baris perintahnya cocok dengan pola. Salah pola dan kalian bisa mematikan proses yang tidak disangka. Gunakan pgrep -f dulu untuk melihat apa yang akan cocok sebelum pkill.

Foreground & Background: Mengelola Banyak Tugas

Sejauh ini semua perintah kita berjalan di foreground — terminal terkunci sampai perintah selesai. Untuk proses yang berjalan lama (misalnya server dev), ada mekanisme background:

Menjalankan proses di background
# Jalankan langsung di background dengan tanda &
sleep 300 &
 
# Daftar job yang ada di sesi shell ini
jobs -l
 
# Pindahkan job ke foreground
fg %1
 
# Pause proses foreground dengan Ctrl+Z, lalu lanjutkan di background
# (setelah menekan Ctrl+Z)
bg %1
& ke background, Ctrl+Z pause, jobs memantau, fg/bg memindahkan

Peta lengkapnya: perintah & memulai job di background; Ctrl+Z menghentikan sementara job foreground; jobs mencantumkan job dengan nomor %n; fg %n mengembalikannya ke foreground; bg %n melanjutkan job yang di-pause ke background. Perhatikan perbedaan penting: job background bukan proses "lepas" — ia tetap terikat pada terminal sesi. Tutup terminal itu, dan job-nya ikut mati.

Note

Kenapa job background ikut mati saat terminal ditutup? Karena kernel mengirim SIGHUP (hang up) ke semua proses yang terikat terminal ketika terminal menutup. Untuk melepaskan proses dari terminal, kita butuh alat yang "mengadopsi" proses itu — inilah gunanya nohup, screen, dan tmux.

Proses Persisten: nohup, screen, dan tmux

Untuk pekerjaan yang harus bertahan setelah SSH terputus — migrasi database, build besar, atau server yang harus jalan 24/7 — ada tiga tingkat solusi:

nohup (no hang up) adalah yang paling sederhana: ia mengabaikan sinyal SIGHUP, sehingga proses bertahan setelah terminal ditutup. Outputnya dialihkan ke nohup.out.

Menjalankan proses yang kebal SIGHUP
nohup ./migrate-data.sh > migrasi.log 2>&1 &
 
# Proses terus berjalan; cek hasilnya nanti
tail -f migrasi.log
nohup + & = proses bertahan walau terminal tertutup

screen dan tmux adalah terminal multiplexer — mereka menciptakan sesi terminal yang hidup terpisah dari terminal fisik. Kalian bisa melepaskan (detach) sesi, menutup SSH, dan kembali lagi nanti; proses tetap berjalan dan output masih ada. tmux adalah standar modern yang paling populer:

Dasar tmux: sesi yang bertahan
# Buat sesi baru bernama "deploy"
tmux new -s deploy
 
# Di dalam sesi: Ctrl+B lalu D untuk detach
# (proses di dalamnya terus berjalan)
 
# Lihat semua sesi yang aktif
tmux ls
 
# Kembali ke sesi
tmux attach -t deploy
Detach dengan Ctrl+B lalu D, kembali dengan tmux attach

Tip

Kapan memakai yang mana? nohup untuk satu perintah yang perlu bertahan. tmux saat kalian butuh workspace interaktif — menjalankan beberapa panel, meng-scroll output, dan kembali ke sesi yang sama setelah koneksi terputus. Untuk server produksi yang harus auto-restart saat crash, jangan pakai ketiganya — itu pekerjaan systemd, yang akan menjadi topik episode 14.

Kesalahan Umum dalam Manajemen Proses

KesalahanGejalaSolusi
kill -9 langsung tanpa SIGTERMData korup, proses tak sempat cleanupKirim SIGTERM dulu, tunggu, baru SIGKILL
Panik melihat proses zombieIngin kill zombie (tidak akan bekerja)Cek parent; zombie dibersihkan oleh parent-nya
pkill -f dengan pola terlalu luasProses yang tidak disangka ikut matipgrep -f dulu untuk melihat kecocokan
Membunuh PID dari ps tanpa verifikasiProses salah terbunuh (PID reused)Verifikasi nama & waktu mulai, atau pakai pgrep
Menutup terminal dengan job backgroundJob ikut mati (SIGHUP)Pakai nohup, screen, atau tmux
kill proses D stateTidak mau mati meski -9Tunggu I/O selesai; -9 tidak mempan pada D

Satu hal yang patut diingat: PID itu bisa dipakai ulang oleh sistem. Proses yang kalian lihat di ps sekarang bisa sudah mati dan PID-nya dipakai proses lain. Itulah alasan pkill/killall (berbasis nama) lebih aman untuk "bunuh semua" dan pgrep berguna untuk memverifikasi sebelum kill per-PID.

Penutup

Pada episode 13 ini kita telah membuka ruang mesin Linux: memahami PID/PPID dan state proses termasuk zombie, membaca snapshot dengan ps aux dan hierarki dengan pstree, memantau real-time dengan top/htop, mengendalikan proses lewat sinyal SIGTERM/SIGKILL/SIGHUP, serta memindahkan pekerjaan ke background dengan &, jobs, fg, bg dan membuatnya persisten dengan nohup, screen, dan tmux. Pelajaran terpenting: proses adalah warga sistem yang punya hak dan tata cara — hormati mereka dengan sinyal yang tepat, dan sistem akan bekerja sama dengan kalian.

Namun, ada satu pertanyaan yang menggantung sejak tadi: siapa yang menjaga agar proses penting selalu berjalan — bahkan setelah crash atau reboot? Jawabannya adalah systemd, init system modern yang menjadi proses nomor 1 di hampir semua distro. Di episode 14 selanjutnya kita akan membahas systemd dan managing services: systemctl, journalctl, hingga menulis service unit file sendiri. Sampai jumpa!