ตอนที่ทำ server บางทีก็เจอว่ามัน kill port ไม่ครบ มี process run ตายอยู่ ไม่ยอมจากไปซักที เลยเขียน function kill port shell script ไว้ทำการล้างบางให้มันจบ ๆ ไป
ฟังก์ชันด้านล่างนี้จะเช็คก่อนว่ามี Process ไหนรันอยู่บน Port นั้นบ้าง ถ้ามีก็จะแสดงรายชื่อออกมาก่อน แล้วทำการส่ง SIGTERM (Kill แบบปกติ) หากยังมี Process ค้างอยู่ มันจะตามด้วย SIGKILL (Force Kill) ทันทีครับ
คุณสามารถก๊อปปี้ฟังก์ชันนี้ไปวางในไฟล์สคริปต์ของคุณ หรือใส่ไว้ใน ~/.bashrc หรือ ~/.zshrc เพื่อเรียกใช้ได้ตลอดเวลาครับ
kill_port() {
# รับค่า Port จาก Argument แรก
local PORT=$1
# ตรวจสอบว่าได้ระบุ Port มาหรือไม่
if [ -z "$PORT" ]; then
echo "❌ กรุณาระบุ Port เช่น: kill_port 8080"
return 1
fi
echo "🔍 กำลังตรวจสอบ Process บน Port: $PORT..."
# ค้นหา PIDs ที่ใช้งาน Port นั้น (รองรับทั้ง TCP และ UDP)
local PIDS=$(lsof -t -i :"$PORT")
if [ -z "$PIDS" ]; then
echo "✅ ไม่มี Process ไหนใช้งาน Port $PORT อยู่"
return 0
fi
echo "⚠️ พบ Process IDs ด้านล่างนี้กำลังรันอยู่:"
echo "$PIDS"
echo "--------------------------------"
# ลูปเพื่อ Kill ทุก PID ที่เจอ
for PID in $PIDS; do
echo "⚡ กำลังส่งสัญญาณ Kill ไปที่ PID: $PID"
# ลอง Kill แบบปกติก่อน (SIGTERM)
kill "$PID" 2>/dev/null
sleep 0.5
# ตรวจสอบว่า Process ตายหรือยัง ถ้ายัง... จัดการ Force Kill (SIGKILL)
if kill -0 "$PID" 2>/dev/null; then
echo "🔥 Process ไม่ยอมดับ... กำลัง Force Kill (PID: $PID)"
kill -9 "$PID" 2>/dev/null
fi
done
echo "🎉 เคลียร์ Port $PORT เรียบร้อยแล้ว!"
}
วิธีนำไปใช้งาน
- สร้างไฟล์สคริปต์ หรือใส่ใน Profile: หากต้องการใช้เป็นคำสั่งติดเครื่อง ให้เปิดไฟล์โปรไฟล์ของคุณ (เช่น
nano ~/.bashrcหรือnano ~/.zshrc) แล้วนำ Code ด้านบนไปวางไว้ท้ายไฟล์ - Apply คำสั่ง
source ~/.bashrc # หรือ source ~/.zshrc - เรียกใช้งาน
kill_port 8080
💡 ข้อควรระวัง
- หาก Port นั้นถูกใช้งานโดย Process ของระบบหรือ User อื่น (เช่น Nginx, Apache) คุณอาจจะต้องรันคำสั่งด้วยสิทธิ์ root โดยใช้
sudo kill_port 80ครับ - คำสั่งนี้จำเป็นต้องมี
lsofติดตั้งอยู่ในเครื่อง (โดยปกติบน macOS และ Linux ส่วนใหญ่จะมีมาให้คำสั่งพื้นฐานอยู่แล้ว)
อ่านเพิ่มเติม