Linux

PID Linux คือ — คู่มือฉบับสมบูรณ์ 2026

PID Linux คือ — คู่มือฉบับสมบูรณ์ 2026

โดย อ.บอม กิตติทัศน์ เจริญพนาสิทธิ์ | อัปเดต 24 ก.พ. 2026 | อ่าน 14 นาที

PID Linux คู่มือฉบับสมบูรณ์ 2026

PID คืออะไร — ทำความเข้าใจ Process ID บน Linux

PID ย่อมาจาก Process ID หรือหมายเลขประจำตัว Process เป็นตัวเลขจำนวนเต็มบวกที่ Linux Kernel กำหนดให้กับทุก Process ที่กำลังทำงานอยู่ในระบบ ทุกครั้งที่โปรแกรมถูกเรียกใช้งาน Kernel จะสร้าง Process ใหม่และกำหนด PID ที่ไม่ซ้ำกับ Process อื่นที่ยังทำงานอยู่ ณ ขณะนั้น PID ถูกใช้เป็นตัวอ้างอิงหลักในการจัดการ Process ไม่ว่าจะเป็นการส่ง Signal การตรวจสอบสถานะ หรือการจัดสรรทรัพยากร

ค่าของ PID เริ่มต้นที่ 1 และเพิ่มขึ้นเรื่อยๆ จนถึงค่าสูงสุดที่กำหนดไว้ในระบบ ซึ่งบน Linux 64-bit สมัยใหม่ค่าสูงสุดอยู่ที่ 4,194,304 (กำหนดใน /proc/sys/kernel/pid_max) เมื่อถึงค่าสูงสุดแล้วระบบจะวนกลับมาเริ่มนับใหม่โดยข้าม PID ที่ยังถูกใช้งานอยู่ ทำให้มั่นใจได้ว่าจะไม่มี PID ซ้ำกันในเวลาเดียวกัน

ทุก Process ยังมี PPID (Parent Process ID) ซึ่งเป็น PID ของ Process แม่ที่สร้างมันขึ้นมา ความสัมพันธ์แบบ Parent-Child นี้ทำให้ Process ทั้งหมดในระบบมีโครงสร้างเป็นแบบ Tree โดยมี PID 1 เป็นรากของต้นไม้

กลไกการทำงานของ PID ใน Linux Kernel

เมื่อโปรแกรมถูกเรียกใช้งาน Kernel จะทำงานตามลำดับดังนี้ ขั้นแรก Process แม่เรียก System Call fork() เพื่อสร้างสำเนาของตัวเอง Kernel จะกำหนด PID ใหม่ให้กับ Process ลูกที่สร้างขึ้น จากนั้น Process ลูกจะเรียก exec() เพื่อแทนที่โค้ดของตัวเองด้วยโปรแกรมที่ต้องการรัน

ในระบบ Linux สมัยใหม่ที่ใช้ Kernel 5.x ขึ้นไป การจัดการ PID ถูกเปลี่ยนมาใช้โครงสร้างข้อมูลแบบ IDR (ID Radix tree) ซึ่งมีประสิทธิภาพสูงกว่าวิธีเดิมที่ใช้ Bitmap อย่างมาก ทำให้การค้นหา PID ว่างและการจอง PID ใหม่ทำได้รวดเร็วแม้ในระบบที่มี Process นับหมื่น

นอกจาก PID แล้ว แต่ละ Process ยังมี TID (Thread ID) สำหรับ Thread, PGID (Process Group ID) สำหรับกลุ่ม Process และ SID (Session ID) สำหรับ Session ข้อมูลเหล่านี้ถูกเก็บรวมกันใน Task Structure ของ Kernel

PID สำคัญในระบบ — PID 0, PID 1 และ PID 2

PID 0 — Swapper/Idle เป็น Process พิเศษที่ทำงานอยู่ใน Kernel Space เรียกว่า Idle Process ทำหน้าที่จัดการการ Swap หน่วยความจำและทำงานเมื่อไม่มี Process อื่นต้องการ CPU คุณจะไม่เห็น Process นี้ในคำสั่ง ps เพราะมันทำงานอยู่ในระดับ Kernel โดยตรง

PID 1 — Init/systemd เป็น Process แรกที่ Kernel สร้างขึ้นหลังจากบูตเสร็จ ในลินุกซ์รุ่นใหม่ PID 1 คือ systemd ซึ่งทำหน้าที่เป็นบรรพบุรุษ (ancestor) ของทุก Process ในระบบ มีหน้าที่สำคัญคือจัดการ Service ต่างๆ รับเลี้ยง Orphan Process และเก็บกวาด Zombie Process หาก PID 1 หยุดทำงาน ระบบทั้งหมดจะ Kernel Panic ทันที

PID 2 — kthreadd เป็น Kernel Thread Daemon ทำหน้าที่เป็น Parent ของ Kernel Thread ทั้งหมดในระบบ เช่น Thread ที่จัดการ I/O, Memory Management และ Network Stack

คำสั่ง ps — ดูรายการ Process ทั้งหมด

คำสั่ง ps (Process Status) เป็นเครื่องมือพื้นฐานที่สุดสำหรับดูข้อมูล Process มี Option ที่ใช้บ่อยหลายแบบ

# ดูทุก Process แบบ BSD syntax
ps aux

# ดูทุก Process แบบ UNIX syntax
ps -ef

# ดูเฉพาะ Process ของ user bom
ps -u bom

# ดู Process พร้อม Thread
ps -eLf

# แสดงเป็น Tree
ps axjf

# แสดงเฉพาะ Column ที่ต้องการ
ps -eo pid,ppid,user,%cpu,%mem,stat,start,command

# ค้นหา Process ชื่อ nginx
ps aux | grep nginx

ผลลัพธ์ของ ps aux จะแสดงข้อมูลสำคัญหลายคอลัมน์ ได้แก่ USER (เจ้าของ Process), PID (หมายเลข Process), %CPU (เปอร์เซ็นต์ CPU ที่ใช้), %MEM (เปอร์เซ็นต์ RAM ที่ใช้), VSZ (Virtual Memory ทั้งหมด), RSS (Physical Memory ที่ใช้จริง), STAT (สถานะ), START (เวลาเริ่ม) และ COMMAND (คำสั่งที่รัน)

คำสั่ง top และ htop — Monitor แบบ Real-time

คำสั่ง top แสดงข้อมูล Process แบบ Real-time อัปเดตทุก 3 วินาที (ปรับได้ด้วย -d) ส่วนบนแสดงสรุปภาพรวมระบบ ได้แก่ Uptime, จำนวน Process, CPU Usage, Memory Usage และ Swap Usage ส่วนล่างแสดงรายการ Process เรียงตาม CPU Usage

# เปิด top
top

# เปิด top แสดงเฉพาะ user bom
top -u bom

# เปิด top อัปเดตทุก 1 วินาที
top -d 1

# เปิด top แสดง Thread
top -H

Shortcut Key ที่มีประโยชน์ใน top ได้แก่ P เรียงตาม CPU, M เรียงตาม Memory, k Kill Process (พิมพ์ PID แล้วกด Enter), r Renice Process (เปลี่ยน Priority), 1 แสดง CPU แต่ละ Core แยกกัน และ q ออกจาก top

htop เป็นเวอร์ชันปรับปรุงของ top ที่มี UI สวยงามกว่า รองรับการเลื่อนขึ้นลง ค้นหา กรอง และ Kill Process ด้วยเมาส์ได้ ติดตั้งด้วย apt install htop (Debian/Ubuntu) หรือ dnf install htop (RHEL/Fedora)

คำสั่ง pgrep, pidof และ pstree

pgrep ค้นหา PID จากชื่อ Process หรือเงื่อนไขอื่นๆ ได้อย่างยืดหยุ่น

# หา PID ของ nginx
pgrep nginx

# หา PID พร้อมแสดงชื่อ Process
pgrep -a nginx

# หา PID ของ Process ที่รันโดย user www-data
pgrep -u www-data

# หา PID ของ Process ที่เปิดมานานกว่า 1 ชั่วโมง
pgrep --older 3600

pidof ค้นหา PID จากชื่อโปรแกรมที่แน่นอน (exact match) ต่างจาก pgrep ที่ใช้ Pattern matching

# หา PID ของ sshd
pidof sshd

# หา PID เดียว (ตัวแรก)
pidof -s sshd

pstree แสดง Process ทั้งหมดในรูปแบบ Tree ทำให้เห็นความสัมพันธ์ Parent-Child ชัดเจน

# แสดง Process Tree ทั้งหมด
pstree

# แสดงพร้อม PID
pstree -p

# แสดง Tree ของ Process เฉพาะ PID 1234
pstree -p 1234

# แสดงพร้อมชื่อ user
pstree -u

/proc Filesystem — อ่านข้อมูล Process โดยตรง

/proc เป็น Virtual Filesystem ที่ Kernel สร้างขึ้นใน RAM ทุก Process จะมีไดเรกทอรี /proc/[PID]/ ที่เก็บข้อมูลครบถ้วนเกี่ยวกับ Process นั้น

ไฟล์ข้อมูลที่เก็บตัวอย่างคำสั่ง
/proc/[PID]/statusสถานะ, Memory, UID, GIDcat /proc/1234/status
/proc/[PID]/cmdlineคำสั่งที่ใช้รัน Processcat /proc/1234/cmdline
/proc/[PID]/environEnvironment Variablescat /proc/1234/environ | tr '\0' '\n'
/proc/[PID]/fd/File Descriptors ที่เปิดอยู่ls -la /proc/1234/fd/
/proc/[PID]/mapsMemory Mappingcat /proc/1234/maps
/proc/[PID]/cgroupCgroup ที่สังกัดcat /proc/1234/cgroup
/proc/[PID]/ioสถิติ I/O Read/Writecat /proc/1234/io
/proc/[PID]/limitsResource Limitscat /proc/1234/limits

การอ่านข้อมูลจาก /proc โดยตรงมีข้อดีคือไม่ต้องพึ่ง External Tool ใดๆ และได้ข้อมูลที่อัปเดตล่าสุดจาก Kernel โดยตรง เหมาะสำหรับการเขียน Script หรือ Monitoring Tool

การจัดการ Process — kill, killall, pkill

การหยุด Process บน Linux ทำได้โดยการส่ง Signal ผ่านคำสั่ง kill และตระกูลเดียวกัน

# ส่ง SIGTERM (ปิดอย่างสุภาพ) ให้ PID 1234
kill 1234

# ส่ง SIGKILL (บังคับหยุดทันที) ให้ PID 1234
kill -9 1234

# ส่ง SIGHUP (reload config) ให้ PID 1234
kill -HUP 1234

# Kill ทุก Process ชื่อ nginx
killall nginx

# Kill Process ตามชื่อ Pattern
pkill -f "python manage.py"

# Kill ทุก Process ของ user guest
pkill -u guest

# Kill Process ที่กิน CPU มากกว่า 90%
pkill --signal KILL -f "$(ps aux --sort=-%cpu | awk 'NR==2{print $NF}')"
หลักการสำคัญ: ใช้ kill (SIGTERM) ก่อนเสมอเพื่อให้ Process มีโอกาสบันทึกข้อมูลและ Cleanup ทรัพยากร ใช้ kill -9 (SIGKILL) เฉพาะเมื่อ Process ไม่ตอบสนองต่อ SIGTERM เท่านั้น

Linux Signals ทั้งหมดที่ควรรู้

Signalหมายเลขหน้าที่จัดการได้?
SIGHUP1Hangup — ใช้ Reload Configได้
SIGINT2Interrupt — เหมือนกด Ctrl+Cได้
SIGQUIT3Quit — ปิดพร้อมสร้าง Core Dumpได้
SIGKILL9บังคับหยุดทันทีไม่ได้
SIGTERM15ขอให้ปิดอย่างสุภาพ (default)ได้
SIGSTOP19หยุดชั่วคราว (Pause)ไม่ได้
SIGCONT18ให้ทำงานต่อ (Resume)ได้
SIGUSR110User-defined Signal 1ได้
SIGUSR212User-defined Signal 2ได้

ดู Signal ทั้งหมดได้ด้วย kill -l บน Linux มี Signal ทั้งหมด 64 ตัว แต่ที่ใช้บ่อยในงาน SysAdmin มีเพียง 5-6 ตัวตามตารางด้านบน

Process States — สถานะต่างๆ ของ Process

ใน Linux Process มีสถานะหลัก 5 แบบที่แสดงในคอลัมน์ STAT ของคำสั่ง ps

ตัวอักษรเพิ่มเติมที่อาจปรากฏหลัง STAT ได้แก่ < (High Priority), N (Low Priority/Nice), l (Multi-threaded), s (Session Leader) และ + (Foreground Process Group)

Parent-Child Relationship และ Zombie Process

ใน Linux ทุก Process (ยกเว้น PID 1) จะถูกสร้างโดย Process อื่น เกิดเป็นความสัมพันธ์แบบ Parent-Child เมื่อ Process ลูกทำงานเสร็จ มันจะส่ง SIGCHLD ให้ Parent แล้วเข้าสู่สถานะ Zombie รอจนกว่า Parent จะเรียก wait() หรือ waitpid() เพื่ออ่าน Exit Status เมื่ออ่านแล้ว Kernel จะลบ Entry ออกจาก Process Table อย่างสมบูรณ์

ปัญหาเกิดขึ้นเมื่อ Parent ไม่เรียก wait() ทำให้ Zombie สะสม แม้ Zombie จะไม่ใช้ CPU หรือ Memory แต่มันใช้ PID ซึ่งมีจำนวนจำกัด หากมี Zombie มากเกินไปอาจทำให้ระบบไม่สามารถสร้าง Process ใหม่ได้

# หา Zombie Process
ps aux | awk '$8=="Z"'

# นับจำนวน Zombie
ps aux | awk '$8=="Z"' | wc -l

# หา Parent ของ Zombie เพื่อแก้ไข
ps -eo pid,ppid,stat,cmd | awk '$3~/Z/'

วิธีแก้ Zombie คือ Kill Parent Process เมื่อ Parent ตาย PID 1 (systemd) จะรับเลี้ยง Zombie เหล่านั้นและเรียก wait() ให้อัตโนมัติ

Namespace และ PID Isolation สำหรับ Container

PID Namespace เป็นฟีเจอร์ของ Linux Kernel ที่ทำให้ Process ใน Namespace ต่างกันมองเห็น PID ต่างกัน เป็นเทคโนโลยีพื้นฐานที่ Docker และ Container Runtime ทั้งหมดใช้ เมื่อสร้าง Container ใหม่ Process แรกภายใน Container จะเห็นตัวเองเป็น PID 1 แม้ว่าบน Host จะมี PID เป็นตัวเลขอื่น

# ดู PID Namespace ของ Process
ls -la /proc/self/ns/pid

# รัน Process ใน PID Namespace ใหม่
unshare --pid --fork --mount-proc bash

# ภายใน Namespace ใหม่ Process จะเริ่มนับ PID จาก 1
ps aux   # จะเห็น PID 1 เป็น bash ที่เพิ่งรัน

การเข้าใจ PID Namespace มีความสำคัญมากสำหรับการ Debug Container เพราะ PID ที่เห็นภายใน Container จะต่างจาก PID บน Host หากต้องการ Kill Process ใน Container จากภายนอก ต้องหา PID บน Host ก่อน ด้วย docker top <container> หรือ docker inspect

ตัวอย่างการแก้ปัญหาจริง — Process กิน CPU/RAM

สถานการณ์ที่พบบ่อยที่สุดของ SysAdmin คือ Process ที่ใช้ทรัพยากรมากผิดปกติ ขั้นตอนการวิเคราะห์และแก้ไขมีดังนี้

กรณี CPU สูง 100%

# หา Process ที่กิน CPU สูงสุด
ps aux --sort=-%cpu | head -5

# ดู Thread ของ Process นั้น
ps -eLo pid,tid,%cpu,comm -p 1234 | sort -k3 -rn | head

# ดู Stack Trace ของ Thread
cat /proc/1234/task/5678/stack

# ใช้ strace ดูว่า Process ทำอะไรอยู่
strace -p 1234 -c   # สรุป System Call
strace -p 1234 -e trace=network   # ดูเฉพาะ Network Call

กรณี RAM เต็ม

# หา Process ที่กิน RAM สูงสุด
ps aux --sort=-%mem | head -10

# ดู Memory Map ละเอียด
pmap -x 1234

# ดูจาก /proc โดยตรง
cat /proc/1234/status | grep -i vm

# ดู OOM Score (ยิ่งสูงยิ่งถูก Kill ก่อน)
cat /proc/1234/oom_score

Best Practices การจัดการ Process

สรุปและ Cheat Sheet คำสั่งที่ใช้บ่อย

PID เป็นแนวคิดพื้นฐานแต่สำคัญมากในระบบ Linux การเข้าใจกลไกของ PID, Process States, Signals และเครื่องมือจัดการ Process จะช่วยให้คุณวิเคราะห์และแก้ปัญหาระบบได้อย่างมีประสิทธิภาพ

งานคำสั่ง
ดูทุก Processps aux
Monitor Real-timetop หรือ htop
หา PID จากชื่อpgrep nginx
ดู Process Treepstree -p
ปิด Process สุภาพkill PID
บังคับ Killkill -9 PID
Reload Configkill -HUP PID
หา Zombieps aux | awk '$8=="Z"'
ดูข้อมูลจาก Kernelcat /proc/PID/status
ดู File ที่เปิดls -la /proc/PID/fd/
อ.บอม กิตติทัศน์ เจริญพนาสิทธิ์
IT Infrastructure Expert | Thaiware Award | ประสบการณ์กว่า 25 ปี ด้าน Network, Linux, Cloud & AI — ผู้ก่อตั้ง SiamCafe.net Since 2000-2026

คำถามที่พบบ่อย (FAQ)

Q: PID Linux คืออะไร

PID (Process ID) คือหมายเลขประจำตัวที่ Linux Kernel กำหนดให้กับทุก Process ที่ทำงานอยู่ในระบบ เป็นตัวเลขจำนวนเต็มบวกที่ไม่ซ้ำกัน ใช้สำหรับระบุ ติดตาม และจัดการ Process

Q: PID 1 คือ Process อะไร

PID 1 คือ Init Process หรือ systemd ในลินุกซ์รุ่นใหม่ เป็น Process แรกที่ Kernel สร้างขึ้นหลังบูต เป็นบรรพบุรุษของทุก Process ในระบบ

Q: ดู PID ของ Process ด้วยคำสั่งอะไร

ใช้ ps aux ดูทุก Process, top/htop ดูแบบ Real-time, pgrep ค้นหาด้วยชื่อ หรือ pidof หา PID จากชื่อโปรแกรม

Q: kill กับ kill -9 ต่างกันอย่างไร

kill ส่ง SIGTERM ให้ Process ปิดตัวอย่างสุภาพ ส่วน kill -9 ส่ง SIGKILL บังคับหยุดทันที ควรใช้ kill ก่อนเสมอ ใช้ kill -9 เมื่อ Process ไม่ตอบสนองเท่านั้น

Q: /proc filesystem คืออะไร

/proc เป็น Virtual Filesystem ที่ Kernel สร้างขึ้นใน RAM แต่ละ Process มีไดเรกทอรี /proc/[PID] ที่เก็บข้อมูลทุกอย่าง เช่น status, cmdline, environ, fd

บทความแนะนำ:

อ่านเพิ่มเติม: บทความทั้งหมด | หน้าแรก Blog