← กลับไปยังบทความทั้งหมด

Exit Status คืออะไร? ทำความเข้าใจรหัสการจบการทำงานของโปรเซส

สรุปใจความสำคัญ

  • Exit Status คือตัวเลขจำนวนเต็มที่โปรเซสลูกส่งกลับไปยังโปรเซสแม่เมื่อสิ้นสุดการทำงาน
  • โดยทั่วไป รหัส 0 หมายถึงการทำงานสำเร็จ และรหัสที่ไม่ใช่ 0 หมายถึงเกิดข้อผิดพลาด
  • ในระบบ DOS รหัสสถานะการจบการทำงานจะถูกเรียกว่า errorlevel

ในทางคอมพิวเตอร์ Exit Status (หรือเรียกอีกอย่างว่า exit code หรือ exit value) คือตัวเลขจำนวนเต็มที่โปรเซส (Process) ที่สิ้นสุดการทำงานส่งกลับไปยังโปรเซสแม่ (Parent Process) หรือผู้เรียกใช้งาน เพื่อแจ้งให้ทราบถึงผลลัพธ์ของการทำงานว่าสำเร็จหรือล้มเหลว

การทำงานของ Exit Status

เมื่อโปรแกรมคอมพิวเตอร์ถูกรัน Operating System (OS) จะสร้างเอนทิตีที่เรียกว่า โปรเซส เพื่อใช้ในการบันทึกข้อมูลการทำงานของโปรแกรมนั้นๆ ในระบบปฏิบัติการแบบ Multitasking เช่น Unix หรือ Linux โปรเซสแม่สามารถสร้างโปรเซสลูก (Child Process) เพื่อมอบหมายงานบางอย่างให้ทำโดยที่โปรเซสแม่ไม่ต้องหยุดการทำงาน

เมื่อโปรเซสลูกทำงานเสร็จสิ้น จะเรียกใช้ exit system call เพื่อส่งรหัสสถานะการจบการทำงานกลับไปยังโปรเซสแม่ ซึ่งโปรเซสแม่สามารถดึงค่านี้มาใช้ผ่าน wait system call

ความหมายของรหัสสถานะ

โดยทั่วไปแล้ว โปรแกรมเมอร์จะมีข้อตกลงร่วมกันเกี่ยวกับความหมายของรหัสเหล่านี้ เช่น:

  • 0: มักใช้แทนความสำเร็จ (Success)
  • ค่าที่ไม่ใช่ 0: มักใช้แทนความล้มเหลว (Failure) หรือข้อผิดพลาดในรูปแบบต่างๆ

รหัสที่ส่งกลับมาอาจระบุสาเหตุเฉพาะของความล้มเหลว โดยในหลายระบบ ยิ่งค่าตัวเลขสูงขึ้น ความรุนแรงของข้อผิดพลาดจะยิ่งมากขึ้น หรือในบางกรณี แต่ละบิตของตัวเลขอาจแทนเงื่อนไขที่แตกต่างกัน

Exit Status ในภาษาและระบบต่างๆ

Shell และ Scripts

ใน Shell Script รหัส 0 หมายถึงความสำเร็จ ส่วนรหัสที่ไม่ใช่ 0 หมายถึงความล้มเหลว หากคำสั่งไม่ถูกพบ Shell จะส่งคืนค่า 127 และหากพบคำสั่งแต่ไม่สามารถรันได้ จะส่งคืนค่า 126

ภาษา C และ C++

ภาษา C และ C++ ใช้ฟังก์ชัน main() เพื่อส่งคืนค่าจำนวนเต็ม หรือใช้แมโคร EXIT_SUCCESS (ปกติคือ 0) และ EXIT_FAILURE (ปกติคือ 1) เพื่อแจ้งสถานะการทำงาน

ภาษา Java

ใน Java เมธอด main() ไม่ได้ส่งคืนค่ารหัสสถานะ ดังนั้นจึงต้องใช้ System.exit() เพื่อกำหนดรหัสการจบการทำงานด้วยตนเอง

ระบบ DOS

ใน DOS จะเรียกสิ่งนี้ว่า errorlevel ซึ่งเป็นรหัสจำนวนเต็ม (ปกติ 0-255) ที่ส่งคืนโดยโปรแกรม โดยโปรแกรม Batch สามารถตรวจสอบค่านี้ผ่านคำสั่ง IF ERRORLEVEL

ระบบอื่นๆ

ระบบ/ภาษาความหมายของรหัส
AmigaOS0=OK, 5=WARN, 10=ERROR, 20=FAILURE
OpenVMSค่าคี่ = สำเร็จ, ค่าคู่ = ล้มเหลว
Plan 9ใช้ String แทนตัวเลขในการส่งสถานะ

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

Exit Status คืออะไร?

คือตัวเลขจำนวนเต็มที่โปรเซสที่ทำงานเสร็จสิ้นส่งกลับไปยังโปรเซสแม่ เพื่อบอกว่าโปรแกรมทำงานสำเร็จหรือเกิดข้อผิดพลาด

ทำไมต้องใช้รหัส 0 เพื่อแทนความสำเร็จ?

เพื่อให้มีวิธีเดียวในการระบุว่าสำเร็จ และมีหลากหลายรหัสเพื่อระบุรูปแบบความล้มเหลวที่แตกต่างกันได้

ใน Shell Script เราจะตรวจสอบ Exit Status ได้อย่างไร?

ใน Shell ส่วนใหญ่ สามารถตรวจสอบค่าสถานะของคำสั่งล่าสุดได้ผ่านตัวแปร $?