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:

OpsiArti
-n DETIKjeda antar eksekusi; bawaannya 2 detik dan boleh desimal seperti -n 0.5
-dmenyorot bagian output yang berubah sejak eksekusi sebelumnya

Berikut contoh tampilan watch -n 2 'cat /proc/loadavg' di tengah sesi pemantauan:

text
Every 2.0s: cat /proc/loadavg                     laptop-budi: Tue 2026-01-20 10:12:45

0.28 0.36 0.41 1/312 8841

Baris 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:

text
systemd─┬─cron
        ├─dbus-daemon
        ├─rsyslogd───2*[{rsyslogd}]
        ├─sshd───sshd───bash───pstree
        └─systemd-journald

Cara 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:

EntriIsi
/proc/<pid>/statusringkasan: nama, status, UID, memori, jumlah thread
/proc/<pid>/cmdlineperintah lengkap beserta argumen, dipisah karakter NUL
/proc/<pid>/environseluruh environment proses saat dilahirkan
/proc/<pid>/commnama program, dibatasi 15 karakter
/proc/<pid>/fd/satu tautan untuk tiap file dan socket yang terbuka
/proc/<pid>/cwd dan exetautan 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:

bash
ls /proc/self | grep -E '^(cmdline|comm|environ|fd|status)$'
echo '---'
grep -E '^(Name|State|Threads):' /proc/self/status

Output yang Dihasilkan:

text
cmdline
comm
environ
fd
status
---
Name:	grep
State:	R (running)
Threads:	1

Mari kita telaah blok di atas:

  1. Baris 1 (ls /proc/self | grep -E ...): mendaftar isi direktori /proc milik ls itu sendiri, lalu menyaring hanya lima entri yang kita bahas di tabel — kolom grep -E '^(...)$' memastikan yang tampil persis nama-nama itu, bukan file lain yang mengandung kata serupa.
  2. Baris 2 (echo '---'): pemisah visual di tengah output.
  3. Baris 3 (grep ... /proc/self/status): membaca tiga baris kunci dari file status milik grep yang sedang membacanya. Name berisi grep karena pembaca file adalah grep itu sendiri; State tampil R (running) karena proses itu memang sedang berjalan ketika membaca statusnya sendiri; Threads mencatat jumlah thread proses tersebut.

Dua entri lainnya, cmdline dan comm, memperlihatkan bagaimana kernel melihat identitas sebuah perintah:

bash
cat /proc/self/cmdline | tr '\0' '\n'
echo '---'
cat /proc/self/comm

Output yang Dihasilkan:

text
cat
/proc/self/cmdline
---
cat

Isi 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:

bash
cat /proc/self/environ | tr '\0' '\n' | sort

Output yang Dihasilkan:

text
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/cat

Daftar 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 .