Process Management and Signals
Overview
- What you’ll learn: How to monitor and manage running processes, understand PIDs, and use signals to control process behavior.
- Prerequisites: Lesson 3 – Users, Groups, and Permissions
- Estimated reading time: 16 minutes
Introduction
Every command you run on Linux creates a process — a running instance of a program. A Linux server may have hundreds or thousands of processes running simultaneously, from system daemons to user applications. As a system administrator, you need to know how to monitor these processes, identify resource-intensive ones, and control their execution.
Linux provides a rich set of tools for process management and a signal mechanism that allows you to communicate with running processes. Understanding these tools is essential for troubleshooting performance issues and maintaining system stability.
Processes and PIDs
Every process on Linux is identified by a unique Process ID (PID). The first process started by the kernel is the init system (PID 1), which on modern Ubuntu systems is systemd. All other processes are descendants of PID 1.
$ echo $$
1234 # PID of your current shell
$ ps aux | head -5
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.2 169436 11204 ? Ss Jan01 0:12 /sbin/init
root 2 0.0 0.0 0 0 ? S Jan01 0:00 [kthreadd]
root 456 0.0 0.1 15432 6780 ? Ss Jan01 0:03 /lib/systemd/systemd-journald
admin 1234 0.0 0.1 8940 5120 pts/0 Ss 10:00 0:00 -bash
The ps aux command shows all running processes. Key columns include:
- USER: The process owner.
- PID: The process ID.
- %CPU / %MEM: CPU and memory usage percentages.
- STAT: Process state (S=sleeping, R=running, Z=zombie, T=stopped).
- COMMAND: The command that started the process.
Monitoring Processes
top and htop
The top command provides a real-time, dynamic view of running processes:
$ top
top - 10:30:00 up 14 days, 3:22, 2 users, load average: 0.15, 0.10, 0.05
Tasks: 142 total, 1 running, 141 sleeping, 0 stopped, 0 zombie
%Cpu(s): 2.3 us, 0.7 sy, 0.0 ni, 96.8 id, 0.2 wa, 0.0 hi, 0.0 si
MiB Mem : 3936.2 total, 1024.5 free, 1456.8 used, 1454.9 buff/cache
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
789 mysql 20 0 1256432 524288 32768 S 1.3 13.0 8:45.12 mysqld
1456 www-data 20 0 456320 98304 65536 S 0.7 2.4 2:12.34 apache2
For a more user-friendly experience, htop provides a colorful, interactive process viewer:
$ sudo apt install htop
$ htop
Within top or htop, press q to quit, k to kill a process, and M to sort by memory usage.
The /proc Filesystem
The /proc virtual filesystem provides detailed information about each process:
$ ls /proc/1/
cmdline cwd environ exe fd maps mem root stat status
$ cat /proc/1/cmdline | tr '' ' '
/sbin/init
$ cat /proc/1/status | head -5
Name: systemd
Umask: 0000
State: S (sleeping)
Tgid: 1
Pid: 1
Controlling Processes
Signals
Signals are the primary mechanism for communicating with processes. The most important signals are:
- SIGTERM (15): Graceful termination — asks the process to clean up and exit.
- SIGKILL (9): Forceful termination — the kernel immediately kills the process (cannot be caught).
- SIGHUP (1): Hangup — often used to tell daemons to reload their configuration.
- SIGSTOP (19): Pauses a process.
- SIGCONT (18): Resumes a paused process.
- SIGINT (2): Interrupt — sent when you press Ctrl+C.
$ kill 1234 # Send SIGTERM to PID 1234
$ kill -9 1234 # Send SIGKILL to PID 1234
$ kill -HUP 1234 # Send SIGHUP to PID 1234
$ killall nginx # Send SIGTERM to all nginx processes
$ pkill -f "python app.py" # Kill processes matching pattern
nice and renice
The nice value determines a process’s scheduling priority. Values range from -20 (highest priority) to 19 (lowest priority). The default is 0.
$ nice -n 10 ./backup.sh # Start with lower priority
$ sudo renice -5 -p 1234 # Change priority of running process
$ ps -eo pid,ni,comm | head -5 # Show nice values
PID NI COMMAND
1 0 systemd
456 0 systemd-journal
1234 10 backup.sh
Background and Foreground
$ ./long_task.sh & # Start in background
[1] 5678
$ jobs
[1]+ Running ./long_task.sh &
$ fg %1 # Bring to foreground
$ # Press Ctrl+Z to suspend
[1]+ Stopped ./long_task.sh
$ bg %1 # Resume in background
[1]+ ./long_task.sh &
$ nohup ./server.sh & # Run immune to hangup signal
nohup: ignoring input and appending output to 'nohup.out'
The nohup command ensures the process continues running even after you disconnect from the terminal.
Key Takeaways
- Every process has a unique PID; use
ps auxto list all processes on the system. topandhtopprovide real-time process monitoring with CPU and memory usage.- Signals control processes: SIGTERM (graceful stop), SIGKILL (force stop), SIGHUP (reload config).
- Use
kill,killall, andpkillto send signals to processes. niceandreniceadjust process scheduling priority.- Run processes in the background with
&and usenohupfor persistence across sessions.
What’s Next
In Lesson 5, you will learn about systemd and Service Management — how to start, stop, enable, and manage system services using systemctl and journalctl.
繁體中文
概述
- 學習目標:學習如何監控和管理執行中的行程、了解 PID,以及使用信號控制行程行為。
- 先決條件:第 3 課 – 使用者、群組和權限
- 預計閱讀時間:16 分鐘
簡介
您在 Linux 上執行的每個命令都會建立一個行程——程式的運行實例。Linux 伺服器可能同時運行數百甚至數千個行程。作為系統管理員,您需要知道如何監控這些行程、識別耗用資源的行程並控制其執行。
行程和 PID
Linux 上的每個行程都有一個唯一的行程 ID (PID)。核心啟動的第一個行程是初始化系統(PID 1),在現代 Ubuntu 系統上是 systemd。
$ ps aux | head -5
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.2 169436 11204 ? Ss Jan01 0:12 /sbin/init
ps aux 顯示所有執行中的行程。主要欄位包括 USER(行程擁有者)、PID(行程 ID)、%CPU/%MEM(CPU 和記憶體使用率)、STAT(行程狀態)。
監控行程
top 和 htop
top 命令提供執行中行程的即時動態檢視。htop 提供更友好的彩色互動式行程檢視器。
/proc 檔案系統
/proc 虛擬檔案系統提供每個行程的詳細資訊。
$ cat /proc/1/status | head -3
Name: systemd
State: S (sleeping)
Pid: 1
控制行程
信號
信號是與行程通訊的主要機制:
- SIGTERM (15):優雅終止——要求行程清理並退出。
- SIGKILL (9):強制終止——核心立即殺死行程(不可攔截)。
- SIGHUP (1):掛斷——通常用於告訴守護行程重新載入設定。
$ kill 1234 # 向 PID 1234 發送 SIGTERM
$ kill -9 1234 # 向 PID 1234 發送 SIGKILL
$ killall nginx # 向所有 nginx 行程發送 SIGTERM
nice 和 renice
nice 值決定行程的排程優先順序。值範圍從 -20(最高優先順序)到 19(最低優先順序)。
背景和前景
$ ./long_task.sh & # 在背景啟動
$ fg %1 # 帶到前景
$ bg %1 # 在背景繼續
$ nohup ./server.sh & # 不受掛斷信號影響地執行
重點摘要
- 每個行程都有唯一的 PID;使用
ps aux列出所有行程。 top和htop提供即時行程監控。- 信號控制行程:SIGTERM(優雅停止)、SIGKILL(強制停止)、SIGHUP(重新載入設定)。
- 使用
kill、killall和pkill向行程發送信號。 nice和renice調整行程排程優先順序。- 使用
&在背景執行行程,使用nohup使行程在會話斷開後繼續運行。
下一步
在第 5 課中,您將學習 systemd 和服務管理——如何使用 systemctl 和 journalctl 啟動、停止、啟用和管理系統服務。
日本語
概要
- 学習内容:実行中のプロセスの監視と管理、PID の理解、シグナルを使用したプロセス制御。
- 前提条件:レッスン3 – ユーザー、グループ、パーミッション
- 推定読了時間:16分
はじめに
Linux で実行するすべてのコマンドはプロセスを作成します。Linux サーバーでは数百から数千のプロセスが同時に実行されている場合があります。システム管理者として、これらのプロセスを監視し、リソースを大量に消費するプロセスを特定し、実行を制御する方法を知る必要があります。
プロセスと PID
Linux 上のすべてのプロセスは一意のプロセス ID (PID)で識別されます。カーネルが最初に起動するプロセスは init システム(PID 1)で、最新の Ubuntu システムでは systemd です。
$ ps aux | head -5
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.2 169436 11204 ? Ss Jan01 0:12 /sbin/init
プロセスの監視
top と htop
top コマンドは実行中のプロセスのリアルタイムな動的ビューを提供します。htop はより使いやすいカラフルなインタラクティブプロセスビューアです。
/proc ファイルシステム
/proc 仮想ファイルシステムは各プロセスの詳細情報を提供します。
$ cat /proc/1/status | head -3
Name: systemd
State: S (sleeping)
Pid: 1
プロセスの制御
シグナル
シグナルはプロセスと通信するための主要なメカニズムです:
- SIGTERM (15):グレースフル終了 — プロセスにクリーンアップして終了するよう要求します。
- SIGKILL (9):強制終了 — カーネルが即座にプロセスを強制終了します(キャッチ不可)。
- SIGHUP (1):ハングアップ — デーモンに設定の再読み込みを指示するためによく使われます。
$ kill 1234 # PID 1234 に SIGTERM を送信
$ kill -9 1234 # PID 1234 に SIGKILL を送信
$ killall nginx # すべての nginx プロセスに SIGTERM を送信
nice と renice
nice 値はプロセスのスケジューリング優先度を決定します。値の範囲は -20(最高優先度)から 19(最低優先度)です。
バックグラウンドとフォアグラウンド
$ ./long_task.sh & # バックグラウンドで開始
$ fg %1 # フォアグラウンドに移動
$ bg %1 # バックグラウンドで再開
$ nohup ./server.sh & # ハングアップシグナルの影響を受けずに実行
重要ポイント
- すべてのプロセスは一意の PID を持ちます。
ps auxですべてのプロセスを一覧表示。 topとhtopはリアルタイムのプロセス監視を提供。- シグナルでプロセスを制御:SIGTERM(グレースフル停止)、SIGKILL(強制停止)、SIGHUP(設定再読み込み)。
kill、killall、pkillでプロセスにシグナルを送信。niceとreniceでプロセスのスケジューリング優先度を調整。&でバックグラウンド実行、nohupでセッション切断後も持続実行。
次のステップ
レッスン5では、systemd とサービス管理について学びます。systemctl と journalctl を使用してシステムサービスの起動、停止、有効化、管理を行う方法を学びます。