DEV Community

Fajar Trengginas
Fajar Trengginas

Posted on

Infra Learning Journey #2 – Process dan Signal di Linux

Catatan Belajar Hari Kedua Memahami Process Linux dan Signal Handling

Setelah memahami permission dan log processing di hari pertama, saya mulai masuk ke konsep yang jauh lebih penting dalam sistem Linux: process management.

Hari ini saya belajar bagaimana sebuah service berjalan, bagaimana Linux mengelola process, dan bagaimana signal bekerja saat kita menghentikan program.


1️⃣ Apa Itu Process?

Setiap command yang dijalankan di Linux adalah sebuah process.

Contoh sederhana:

sleep 300
Enter fullscreen mode Exit fullscreen mode

Saat command ini berjalan, Linux membuat sebuah process dengan PID (Process ID) unik.

Untuk melihatnya:

ps aux | grep sleep
Enter fullscreen mode Exit fullscreen mode

Dari sini saya memahami bahwa:

Setiap aplikasi adalah process dan Setiap process punya PID

Linux mengelola semuanya melalui process tree


2️⃣ Background Process & Job Control

Menjalankan command di background:

sleep 300 &
jobs
Enter fullscreen mode Exit fullscreen mode

Ternyata jobs hanya menampilkan process yang dijalankan di session shell yang sama.Jika membuka terminal baru, jobs tidak akan menampilkan apa pun.

Ini membuat saya memahami bahwa job control bersifat lokal terhadap shell session.


3️⃣ Parent & Child Process

Saya membuat simulasi service sederhana:

#!/bin/bash

while true
do
    echo "Service running at $(date)"
    sleep 2
done
Enter fullscreen mode Exit fullscreen mode

Ketika dijalankan:

./fake-service.sh &
Enter fullscreen mode Exit fullscreen mode

Saya menemukan sesuatu yang menarik:

Script memiliki satu PID

sleep memiliki PID berbeda

PID sleep akan terus berubah

Kenapa?

Karena:

Script adalah parent process

Setiap sleep adalah child process

Saat sleep selesai, loop membuat child baru dan penting untuk diketahui jika :

Killing child process tidak menghentikan service
Killing parent process menghentikan semuanya


4️⃣ Killing Process: kill vs pkill

Untuk menghentikan process berdasarkan PID:

kill <PID>
Enter fullscreen mode Exit fullscreen mode

Untuk menghentikan berdasarkan nama:

pkill sleep
Enter fullscreen mode Exit fullscreen mode

Perbedaannya:

kill → target spesifik PID

pkill → target berdasarkan nama process


5️⃣ Signal Handling: SIGTERM vs SIGKILL

Default:

kill PID
Enter fullscreen mode Exit fullscreen mode

Sebenarnya mengirim:

SIGTERM (15)

Force kill:

kill -9 PID
Enter fullscreen mode Exit fullscreen mode

Mengirim:

SIGKILL (9)

Perbedaan penting:

Signal Graceful Bisa Ditangkap
SIGTERM Ya Ya
SIGKILL Tidak Tidak

Untuk memahami graceful shutdown, saya menambahkan trap:

trap "echo 'Service stopping...'; exit 0" SIGTERM
Enter fullscreen mode Exit fullscreen mode

Saat dikill dengan SIGTERM, service bisa membersihkan dirinya sebelum berhenti.

Konsep ini sangat penting dalam container dan production system.


💡 Insight Penting Hari Ini

Docker container pada dasarnya adalah Linux process yang diisolasi.

Jika main process mati, container mati.

Jika signal tidak ditangani dengan benar, shutdown bisa tidak graceful.

Memahami process dan signal membuat saya melihat Docker bukan sebagai “magic”, tetapi sebagai abstraction di atas Linux process.

Sampai jumpa di Infra Journey hari ketiga!

Top comments (0)