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
ระบบอื่นๆ
| ระบบ/ภาษา | ความหมายของรหัส |
|---|---|
| AmigaOS | 0=OK, 5=WARN, 10=ERROR, 20=FAILURE |
| OpenVMS | ค่าคี่ = สำเร็จ, ค่าคู่ = ล้มเหลว |
| Plan 9 | ใช้ String แทนตัวเลขในการส่งสถานะ |
คำถามที่พบบ่อย
Exit Status คืออะไร?
คือตัวเลขจำนวนเต็มที่โปรเซสที่ทำงานเสร็จสิ้นส่งกลับไปยังโปรเซสแม่ เพื่อบอกว่าโปรแกรมทำงานสำเร็จหรือเกิดข้อผิดพลาด
ทำไมต้องใช้รหัส 0 เพื่อแทนความสำเร็จ?
เพื่อให้มีวิธีเดียวในการระบุว่าสำเร็จ และมีหลากหลายรหัสเพื่อระบุรูปแบบความล้มเหลวที่แตกต่างกันได้
ใน Shell Script เราจะตรวจสอบ Exit Status ได้อย่างไร?
ใน Shell ส่วนใหญ่ สามารถตรวจสอบค่าสถานะของคำสั่งล่าสุดได้ผ่านตัวแปร $?
