Mengintip proses sekali lewat ps itu mudah, tetapi banyak masalah tidak duduk diam: pemakaian CPU naik-turun, environment berbeda antar sesi, dan file yang terbuka terus berganti. Diagnosis yang baik butuh tiga alat: perintah yang mengulang dirinya sendiri, peta silsilah antar proses, dan akses ke data mentah di /proc — jendela kernel ke setiap proses. Chapter ini membedah ketiganya — watch, pstree, dan direktori /proc/<pid> — lalu menutup dengan lsof untuk melihat file apa saja yang sedang dipegang sebuah proses.
watch: Perintah yang Memperbarui Dirinya Sendiri #
watch menjalankan sebuah perintah berulang kali, membersihkan layar, lalu menampilkan hasil terbarunya di tempat yang sama. Perintahnya ditulis sebagai argumen, biasanya dikutip agar terbaca sebagai satu kesatuan — misalnya watch -n 5 'df -h /' untuk mengawasi sisa disk setiap lima detik, atau watch -n 1 'cat /proc/loadavg' untuk mengamati load average yang kita kenal di Chapter Process Priority
. Tekan Ctrl+C untuk berhenti. Dua opsi yang paling sering dipakai:
| Opsi | Arti |
|---|---|
-n DETIK | jeda antar eksekusi; bawaannya 2 detik dan boleh desimal seperti -n 0.5 |
-d | menyorot bagian output yang berubah sejak eksekusi sebelumnya |
Berikut contoh tampilan watch -n 2 'cat /proc/loadavg' di tengah sesi pemantauan:
Every 2.0s: cat /proc/loadavg laptop-budi: Tue 2026-01-20 10:12:45
0.28 0.36 0.41 1/312 8841Baris pertama selalu menampilkan jeda, perintah yang dipantau, nama host, dan jam penyegaran — angka di bawahnya berganti setiap dua detik tanpa menumpuk di layar. Dengan -d, bagian yang berubah menyala terbalik sehingga pola naik-turunnya cepat tertangkap mata.
pstree: Membaca Silsilah Proses #
Setiap proses dilahirkan oleh proses lain, dan seluruh garis keturunan bermuara pada proses pertama (PID 1, biasanya systemd di distribusi modern). Hubungan parent-child inilah yang digambar pstree: induk di kiri, anak menjorok ke kanan dengan garis penghubung. Berikut contoh tampilan pstree pada server yang sedang dipakai dari jauh:
systemd─┬─cron
├─dbus-daemon
├─rsyslogd───2*[{rsyslogd}]
├─sshd───sshd───bash───pstree
└─systemd-journaldCara membacanya: systemd di paling kiri adalah leluhur semua proses; cron dan dbus-daemon anak langsungnya; rantai sshd───sshd───bash───pstree menunjukkan sesi login kita sendiri — daemon sshd menerima koneksi, melahirkan sshd sesi yang menjalankan shell bash, dan dari shell itulah pstree dipanggil. Notasi 2*[{rsyslogd}] merangkum dua thread bernama sama. Opsi -p menambahkan PID di samping tiap nama, berguna saat hasilnya mau diteruskan ke kill atau renice. Bila pstree belum terpasang, program ini tersedia dalam paket psmisc.
Turun ke Sumber: /proc/<pid> #
Semua yang ditampilkan ps dan top pada dasarnya dibaca dari direktori /proc/<pid> — satu direktori per proses, dibuat kernel saat proses lahir dan lenyap saat proses mati. Entri yang paling sering kita bedah saat diagnosis:
| Entri | Isi |
|---|---|
/proc/<pid>/status | ringkasan: nama, status, UID, memori, jumlah thread |
/proc/<pid>/cmdline | perintah lengkap beserta argumen, dipisah karakter NUL |
/proc/<pid>/environ | seluruh environment proses saat dilahirkan |
/proc/<pid>/comm | nama program, dibatasi 15 karakter |
/proc/<pid>/fd/ | satu tautan untuk tiap file dan socket yang terbuka |
/proc/<pid>/cwd dan exe | tautan ke direktori kerja dan file program aslinya |
Trik penting saat bereksperimen: /proc/self selalu menunjuk proses yang sedang membacanya, jadi kita bisa membedah isi direktori itu tanpa tahu PID-nya. Mari kita buktikan:
ls /proc/self | grep -E '^(cmdline|comm|environ|fd|status)$'
echo '---'
grep -E '^(Name|State|Threads):' /proc/self/statusOutput yang Dihasilkan:
cmdline
comm
environ
fd
status
---
Name: grep
State: R (running)
Threads: 1Mari kita telaah blok di atas:
- Baris 1 (
ls /proc/self | grep -E ...): mendaftar isi direktori/procmiliklsitu sendiri, lalu menyaring hanya lima entri yang kita bahas di tabel — kolomgrep -E '^(...)$'memastikan yang tampil persis nama-nama itu, bukan file lain yang mengandung kata serupa. - Baris 2 (
echo '---'): pemisah visual di tengah output. - Baris 3 (
grep ... /proc/self/status): membaca tiga baris kunci dari filestatusmilikgrepyang sedang membacanya.Nameberisigrepkarena pembaca file adalahgrepitu sendiri;StatetampilR (running)karena proses itu memang sedang berjalan ketika membaca statusnya sendiri;Threadsmencatat jumlah thread proses tersebut.
Dua entri lainnya, cmdline dan comm, memperlihatkan bagaimana kernel melihat identitas sebuah perintah:
cat /proc/self/cmdline | tr '\0' '\n'
echo '---'
cat /proc/self/commOutput yang Dihasilkan:
cat
/proc/self/cmdline
---
catIsi cmdline dipisah karakter NUL (\0), bukan baris baru, sehingga tr '\0' '\n' mengubahnya menjadi satu argumen per baris — terlihat cat dijalankan dengan argumen /proc/self/cmdline. Sementara comm hanya memuat nama programnya, terpotong maksimal 15 karakter. Perbedaan keduanya penting saat diagnosis: comm cocok untuk mencari proses berdasar nama, sedangkan cmdline membedakan misalnya tar czf dari tar xzf.
Membaca Environment Proses #
Environment sebuah proses dibekukan saat proses itu dilahirkan, dan isinya tersimpan di file environ dengan pemisah NUL yang sama seperti cmdline. Kali ini kita urutkan hasilnya dengan sort agar mudah dibandingkan antar proses:
cat /proc/self/environ | tr '\0' '\n' | sortOutput yang Dihasilkan:
HOME=/home/budi
LANG=C.UTF-8
LC_ALL=C.UTF-8
PATH=/usr/local/bin:/usr/bin:/bin
PWD=/home/budi
SHLVL=1
TERM=dumb
_=/usr/bin/catDaftar yang tampil di mesin Anda tentu berbeda karena mengikuti sesi masing-masing — di blok di atas terlihat HOME, PATH, TERM, plus variabel yang ditambahkan shell otomatis seperti PWD (direktori kerja), SHLVL (kedalaman shell bersarang), dan _ (path perintah terakhir). Membaca environ semacam ini berguna memastikan proses yang dicurigai benar-benar melihat environment yang kita harapkan — kunci ketika kita bertemu environment minimal milik cron pada chapter berikutnya.
lsof: File Apa yang Sedang Dipegang #
Di Linux hampir semuanya berupa file — file biasa, direktori, socket jaringan, bahkan terminal. lsof (list open files) mendaftar semua file yang sedang dibuka sebuah proses, dengan sumber data yang sama dengan direktori /proc/<pid>/fd. Pola yang paling sering dipakai: lsof -p PID untuk mengintip satu proses, lsof file.txt untuk mencari siapa memegang file tertentu, dan lsof -i :22 untuk proses yang mendengarkan port 22. Saat perangkat gagal di-unmount dengan pesan target is busy, lsof /media/usb adalah cara cepat menemukan proses yang masih memegangnya — matikan proses itu, dan unmount berhasil. Detail kolomnya ada di alaman manual lsof(8)
.
Dengan watch, pstree, /proc, dan lsof, kita punya perangkat lengkap untuk mengamati proses yang sedang berjalan. Pertanyaan berikutnya: bagaimana agar pekerjaan berjalan bahkan ketika kita tidak sedang memantau — misalnya backup setiap dini hari? Jawabannya adalah daemon bernama cron, materi Chapter cron dan crontab
.