Process Management — Terminal

Process Management Setiap program yang berjalan di komputer adalah sebuah process. Sebagai developer, kamu perlu bisa melihat, mengontrol, dan menghentikan…

Setiap program yang sedang jalan disebut process, dan tiap process punya nomor unik, PID (process ID). Mirip dapur restoran: tiap pesanan yang sedang dimasak punya nomor tiket. Mau membatalkan pesanan, kamu sebut nomornya, bukan nama masakannya, karena bisa saja ada dua nasi goreng yang dimasak bersamaan. Dan kamu bisa minta baik-baik ("tolong berhenti"), atau langsung mematikan kompornya.

🧪 Tebakan cepat: kamu menjalankan kill 4230, tanpa -9. Process itu pasti berhenti, atau bisa tetap jalan? Tebak dulu, jawabannya ada di bagian "kill: mengirim signal".

Melihat process: ps aux

Di server sungguhan daftarnya panjang, ini potongannya:

$ ps aux
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root           1  0.0  0.1 167740 11904 ?        Ss   08:00   0:02 /sbin/init
www-data     812  2.5  1.2  55320 24160 ?        S    08:01   0:31 nginx: worker process
budi        4188  5.0  3.0 987364 98304 pts/1    Sl+  09:02   0:41 node server.js
budi        4230 97.8  1.0 240112 32768 pts/2    R+   09:05   2:14 python3 worker.py
budi        4301  0.0  0.0  11496  4608 pts/0    R+   09:15   0:00 ps aux

Mencari satu program biasanya pakai pipe ke grep:

$ ps aux | grep node
budi        4188  5.0  3.0 987364 98304 pts/1    Sl+  09:02   0:41 node server.js
budi        4302  0.0  0.0   6612  2304 pts/0    S+   09:15   0:00 grep --color=auto node

Baris kedua adalah grep itu sendiri: perintahnya mengandung kata node. pgrep -a node lebih bersih, dia cuma mencetak 4188 node server.js. Untuk memantau terus-menerus, pakai top atau htop (tekan q untuk keluar).

kill: mengirim signal

Signal adalah pesan pendek yang dikirim ke process. Namanya kill, tapi tugasnya mengirim signal, dan gak semua signal mematikan.

Signal Nomor Dikirim oleh Bisa ditangkap process?
SIGTERM 15 kill PID (default) ya: process bisa merapikan diri dulu
SIGKILL 9 kill -9 PID gak: sistem langsung menghentikannya
SIGINT 2 Ctrl+C ya
SIGTSTP 20 Ctrl+Z ya: process-nya dijeda
SIGHUP 1 terminal ditutup ya
$ kill 4188
$ kill 4230
$ pgrep -a python3
4230 python3 worker.py
$ kill -9 4230
$ kill 812
bash: kill: (812) - Operation not permitted
$ kill 4230
bash: kill: (4230) - No such process

kill -15, kill -TERM dan kill -SIGTERM sama saja. Begitu juga kill -9, kill -KILL dan kill -SIGKILL.

Foreground dan background

Process yang jalan di foreground memegang terminalmu: kamu gak bisa mengetik perintah lain sampai dia selesai. Tanda & di akhir perintah menjalankannya di background:

$ node server.js &
[1] 4410
Server jalan di port 3000
$ jobs
[1]+  Running                 node server.js &
$ fg %1
node server.js
^C
$ node server.js
Server jalan di port 3000
^Z
[1]+  Stopped                 node server.js
$ bg %1
[1]+ node server.js &

Membaca ps dengan JavaScript

Latihan pelajaran ini: parseProcessList mengubah output yang mirip ps aux, lima kolom USER PID %CPU %MEM COMMAND, jadi array of object.

function parseProcessList(psOutput) {
  return psOutput.split("\n").map((line) => {
    const parts = line.trim().split(/\s+/); // /\s+/ = satu spasi atau lebih
    return {
      user: parts[0],
      pid: Number(parts[1]),
      cpu: Number(parts[2]),
      mem: Number(parts[3]),
      command: parts.slice(4).join(" "), // sisanya, karena command boleh berspasi
    };
  });
}

console.log(parseProcessList("www 123 2.5 1.2 nginx: worker process"));
// [{ user: "www", pid: 123, cpu: 2.5, mem: 1.2, command: "nginx: worker process" }]
Index parts[i] Jadi
0 "www" user: "www"
1 "123" pid: 123, angka
2 "2.5" cpu: 2.5
3 "1.2" mem: 1.2
4 sampai 6 "nginx:", "worker", "process" command: "nginx: worker process"

⚠️ Jebakan yang sering ketemu

TL;DR: Tiap program yang jalan adalah process dengan PID. ps aux menampilkan semuanya (a semua user, u format lengkap, x termasuk yang tanpa terminal); pgrep -a nama mencari PID tanpa ikut menemukan dirinya sendiri, dan top atau htop memantau langsung. kill PID mengirim SIGTERM (15), permintaan berhenti yang boleh ditangkap; kill -9 PID mengirim SIGKILL, paksa dan tanpa cleanup, jalan terakhir. Ctrl+C = SIGINT, Ctrl+Z = SIGTSTP (dijeda, bukan berhenti). & menjalankan di background, jobs, fg %1 dan bg %1 mengatur job. Di latihan, split(/\s+/), Number(...) untuk pid, cpu, mem, dan slice(4).join(" ") untuk command.

Yang akan kamu pelajari