---
title: "Cara Mematikan Proses yang Macet dengan kill di Linux"
description: "Cara menemukan PID dan menghentikan proses macet dengan kill, pkill, dan killall, kapan memakai SIGTERM atau kill -9, dan kenapa proses bisa hidup lagi."
url: "https://nivelva.com/insight/cara-mematikan-proses-macet-kill-linux"
category: "Server \u0026 Infrastruktur"
tags: ["kill","linux","proses","sinyal","server"]
author: "Theresia Candiawan"
published: "2026-11-07T03:55:00+07:00"
updated: "2026-11-07T03:55:00+07:00"
language: "id"
publisher: "Nivelva (https://nivelva.com)"
---

# Cara Mematikan Proses yang Macet dengan kill di Linux

> **Jawaban singkat:** Temukan PID dengan pgrep atau top, lalu hentikan dengan kill PID yang mengirim SIGTERM agar program menutup diri dengan rapi. Pakai kill -9 hanya bila proses tidak merespons. Untuk service, gunakan systemctl stop atau restart supaya tidak dihidupkan ulang otomatis.

Untuk mematikan proses yang macet, cari dulu nomor prosesnya (PID), kirim `kill PID`, tunggu beberapa detik, dan baru pakai `kill -9 PID` bila proses itu tetap tidak mau berhenti.

Kenapa urutannya penting? Karena `kill` sebenarnya bukan "membunuh", melainkan mengirim sinyal. Sinyal bawaan meminta program berhenti dengan sopan: menyelesaikan tulisan ke disk, menutup koneksi database, dan menghapus file sementara. `kill -9` memaksa kernel langsung menghentikannya tanpa kesempatan beres-beres. Untuk database atau aplikasi yang sedang menulis data, perbedaan ini bisa berarti data utuh atau data rusak.

## Bagaimana menemukan PID proses yang macet?

Beberapa cara, dari yang paling praktis:

- `pgrep -a php`: menampilkan PID beserta perintah lengkap untuk proses yang namanya mengandung "php".
- `pidof nginx`: PID untuk program dengan nama persis.
- `ps aux --sort=-%cpu | head`: proses dengan pemakaian CPU tertinggi.
- `top` atau `htop`: lihat kolom PID sambil mengurutkan berdasarkan CPU atau memori. Cara membacanya ada di [cara melihat proses dengan top dan htop](https://nivelva.com/insight/cara-melihat-proses-berjalan-top-htop).
- `sudo ss -ltnp | grep :3000`: proses yang memakai port 3000, berguna saat aplikasi gagal jalan karena "address already in use".

Pastikan PID yang kamu catat memang proses yang dimaksud. Salah ketik satu angka bisa menghentikan proses lain.

Untuk port yang tertahan, ada jalan pintas `sudo fuser -k 3000/tcp`, yang langsung mengirim SIGKILL ke proses pemakai port tersebut. Perintah `fuser` berasal dari paket `psmisc`. Karena sinyalnya langsung SIGKILL, gunakan hanya bila kamu sudah yakin proses apa yang memegang port itu, misalnya sisa aplikasi pengembangan yang lupa dimatikan.

## Sinyal yang perlu kamu kenal

| Sinyal | Nomor | Cara kirim | Efek |
|:--|:--|:--|:--|
| SIGTERM | 15 | `kill PID` | Bawaan. Meminta program berhenti dengan rapi |
| SIGINT | 2 | `kill -INT PID` atau Ctrl+C | Sama seperti menekan Ctrl+C di terminal |
| SIGHUP | 1 | `kill -HUP PID` | Banyak daemon memuat ulang config, bukan berhenti |
| SIGKILL | 9 | `kill -9 PID` | Dihentikan paksa oleh kernel, tidak bisa ditolak |
| SIGSTOP | 19 | `kill -STOP PID` | Membekukan proses sementara |
| SIGCONT | 18 | `kill -CONT PID` | Melanjutkan proses yang dibekukan |

Nomor SIGSTOP dan SIGCONT di atas berlaku untuk Linux di arsitektur x86 dan ARM. Supaya tidak salah, menulis nama sinyal (misalnya `-TERM`, `-KILL`) lebih aman daripada nomornya. Daftar lengkap bisa dilihat dengan `kill -l`.

## Langkah aman menghentikan proses

1. Kirim sinyal biasa: `kill 12345`. Bila proses milik user lain atau root, tambahkan `sudo`.
2. Tunggu beberapa detik, lalu cek: `ps -p 12345`. Bila tidak muncul lagi, proses sudah berhenti.
3. Bila masih ada, paksa: `kill -9 12345`.
4. Cek log aplikasi untuk mencari tahu kenapa proses macet, supaya tidak terulang.

`kill` tidak mengeluarkan pesan apa pun bila berhasil. Pesan "No such process" berarti PID itu sudah tidak ada, sedangkan "Operation not permitted" berarti kamu perlu `sudo`.

## Kapan memakai pkill dan killall?

Bila ada banyak proses dengan nama sama, misalnya puluhan worker skrip yang macet, mengirim `kill` satu per satu merepotkan. Ada dua alternatif:

- `pkill nama`: menghentikan semua proses yang namanya cocok. Tambahkan `-f` untuk mencocokkan perintah lengkap, misalnya `pkill -f "python3 worker.py"`.
- `killall nama`: menghentikan semua proses dengan nama persis. Di AlmaLinux minimal, perintah ini ada di paket `psmisc` yang mungkin perlu dipasang dulu.

Keduanya mengirim SIGTERM secara bawaan, dan bisa diberi `-9` bila perlu. Selalu jalankan `pgrep -a nama` dulu untuk melihat proses apa saja yang akan kena. Pola yang terlalu umum, seperti `pkill -f php`, bisa ikut menghentikan PHP-FPM yang melayani website.

## Kenapa proses yang sudah di-kill hidup lagi?

Ini kebingungan yang paling sering. Bila proses itu bagian dari **service**, pengelolanya akan menyalakannya kembali. systemd dengan pengaturan `Restart=always` atau `Restart=on-failure`, PM2 untuk aplikasi Node.js, dan Docker dengan kebijakan restart semuanya bekerja seperti ini. Itu fitur, bukan bug.

Untuk service, gunakan pengelolanya:

- `sudo systemctl stop nama-service` untuk menghentikan, atau `restart` untuk menyalakan ulang.
- `systemctl status 12345`: menunjukkan service mana pemilik PID tersebut.
- `pm2 stop nama-app` atau `docker stop nama-container` sesuai cara aplikasi dijalankan.

Cara membuat service yang otomatis bangkit bila gagal ada di [cara membuat service systemd](https://nivelva.com/insight/membuat-service-systemd).

> **Jangan kill proses sistem sembarangan:**
>
> Menghentikan `sshd` bisa memutus aksesmu ke server, dan mengirim sinyal ke PID 1 (systemd) atau proses kernel berisiko membuat sistem tidak stabil. Untuk database seperti MySQL atau PostgreSQL, selalu coba `systemctl stop` dulu sebelum memakai `kill -9`.

## Proses yang tidak bisa dihentikan

Ada dua kasus di mana `kill -9` pun tampak tidak berpengaruh:

- **Status D** (uninterruptible sleep) di kolom S pada top. Proses sedang menunggu I/O, misalnya disk yang bermasalah atau share NFS yang putus. Sinyal baru diproses setelah I/O selesai. Penyebabnya harus diperbaiki di sisi disk atau jaringan, dan kadang satu-satunya jalan adalah reboot.
- **Status Z** (zombie). Proses sudah selesai, hanya tersisa catatannya. Zombie tidak bisa di-kill karena memang sudah mati. Hentikan atau restart proses induknya (lihat kolom PPID dengan `ps -o ppid= -p PID`), maka zombie ikut hilang.

Satu lagi: bila prosesmu berhenti sendiri tanpa kamu kirim sinyal apa pun, mungkin kernel yang menghentikannya karena RAM habis. Cek dengan `sudo dmesg -T | grep -i "killed process"` atau `journalctl -k | grep -i oom`.

Proses yang kamu jalankan manual di SSH juga ikut berhenti saat koneksi putus, karena menerima SIGHUP. Untuk pekerjaan panjang, jalankan di dalam [screen atau tmux](https://nivelva.com/insight/cara-memakai-screen-tmux-proses-tidak-putus).

## Pertanyaan yang sering diajukan

### Apakah kill -9 bisa merusak data?

Bisa. Program tidak sempat menyimpan isi buffer atau menutup file dengan rapi, sehingga file yang sedang ditulis bisa tidak lengkap. Database umumnya punya mekanisme pemulihan, tetapi tetap lebih aman memakai SIGTERM atau systemctl stop lebih dulu.

### Bagaimana menghentikan semua proses milik satu user?

Jalankan sudo pkill -u namauser. Periksa dulu dengan pgrep -u namauser -a supaya tahu proses apa saja yang akan berhenti.

### Bagaimana membatasi waktu jalan sebuah perintah supaya tidak macet?

Gunakan perintah timeout, misalnya timeout 300 ./skrip.sh. Setelah 300 detik, skrip dikirimi SIGTERM. Tambahkan -k 10 agar dikirimi SIGKILL bila masih hidup 10 detik kemudian.

## Sumber

- <https://man7.org/linux/man-pages/man1/kill.1.html>
- <https://man7.org/linux/man-pages/man7/signal.7.html>

---

Diterbitkan oleh Nivelva Insight (https://nivelva.com/insight/). Artikel ini: https://nivelva.com/insight/cara-mematikan-proses-macet-kill-linux
Kontak Nivelva: WhatsApp https://wa.me/6285111245007, email hello@nivelva.com
