สถานะการออก

ในการคำนวณสถานะทางออกหรือรหัสทางออกของกระบวนการ ที่ถูกยกเลิก คือเลขจำนวนเต็มที่ทำให้กระบวนการหลัก (หรือผู้เรียก) ใช้งานได้ ในDOSสิ่งนี้อาจเรียกว่าระดับข้อผิดพลาด

เมื่อโปรแกรมคอมพิวเตอร์ถูกเรียกใช้งานระบบปฏิบัติการจะสร้างเอนทิตีเชิงนามธรรมที่เรียกว่ากระบวนการที่รักษาการลงบัญชีสำหรับโปรแกรมนั้นไว้ ในระบบปฏิบัติการมัลติทาสกิ้ง เช่นUnixหรือLinuxกระบวนการใหม่สามารถสร้างขึ้นได้โดยกระบวนการที่ใช้งานอยู่ กระบวนการที่ทำให้เกิดกระบวนการอื่นเรียกว่ากระบวนการหลักในขณะที่กระบวนการที่สร้างขึ้นนั้นเป็นกระบวนการลูกกระบวนการลูกทำงานพร้อมกันกับกระบวนการหลัก เทคนิคการวางไข่กระบวนการลูกใช้เพื่อมอบหมายงานบางอย่างให้กับกระบวนการลูกเมื่อไม่มีเหตุผลที่จะหยุดการดำเนินการของกระบวนการหลัก เมื่อลูกดำเนินการเสร็จสิ้น มันจะออกโดยการเรียกการเรียกระบบออก การเรียกระบบนี้อำนวยความสะดวกในการส่งรหัสสถานะการออกกลับไปยังพาเรนต์ ซึ่งสามารถดึงค่านี้โดยใช้การเรียกของระบบ รอ

ความหมาย

ผู้ปกครองและเด็กสามารถเข้าใจความหมายของสถานะการออกได้ ตัวอย่างเช่น เป็นแนวทางปฏิบัติทั่วไปในการเขียนโปรแกรมสำหรับกระบวนการลูกเพื่อส่งคืน (ออกด้วย) ศูนย์ไปยังพาเรนต์ที่แสดงถึงความสำเร็จ นอกเหนือจากค่าที่ส่งคืนจากรายการย่อยแล้ว ข้อมูลอื่นๆ เช่น วิธีการออกจากกระบวนการ ทั้งแบบปกติหรือโดยสัญญาณอาจมีให้สำหรับกระบวนการหลักด้วย

ชุดรหัสเฉพาะที่ส่งคืนจะไม่ซ้ำกันสำหรับโปรแกรมที่ตั้งค่าไว้ โดยทั่วไปแล้วจะบ่งบอกถึงความสำเร็จหรือความล้มเหลว ค่าของโค้ดที่ส่งคืนโดยฟังก์ชันหรือโปรแกรมอาจระบุถึงสาเหตุของความล้มเหลวโดยเฉพาะ ในหลายระบบ ยิ่งค่าสูง สาเหตุของข้อผิดพลาดก็จะยิ่งรุนแรงมากขึ้น[1]อีกทางหนึ่ง แต่ละบิตอาจระบุเงื่อนไขที่แตกต่างกัน โดยที่สิ่งเหล่านี้ได้รับการประเมินโดยตัวดำเนินการหรือร่วมกันเพื่อให้ได้ค่าสุดท้าย ตัวอย่างเช่นfsckทำสิ่งนี้

บางครั้ง หากโค้ดได้รับการออกแบบโดยคำนึงถึงจุดประสงค์นี้ ก็จะสามารถใช้เป็นดัชนีสาขาได้โดยตรงเมื่อกลับไปยังโปรแกรมเริ่มต้นเพื่อหลีกเลี่ยงการทดสอบเพิ่มเติม

เอมิกาโอเอส

ในAmigaOS , MorphOSและAROSมีการกำหนดสี่ระดับ:

  • ตกลง 0
  • คำเตือน 5
  • ข้อผิดพลาด 10
  • ความล้มเหลว 20

เชลล์และสคริปต์

โดยทั่วไปแล้ว เชลล์สคริปต์จะรันคำสั่งและบันทึกสถานะการออก

สำหรับวัตถุประสงค์ของเชลล์ คำสั่งที่ออกโดยมีสถานะการออกเป็นศูนย์ได้สำเร็จ สถานะการออกที่ไม่ใช่ศูนย์บ่งชี้ถึงความล้มเหลว รูปแบบที่ดูเหมือนขัดกับสัญชาตญาณนี้ถูกนำมาใช้ ดังนั้นจึงมีวิธีหนึ่งที่กำหนดไว้อย่างชัดเจนในการบ่งชี้ความสำเร็จ และหลากหลายวิธีในการระบุโหมดความล้มเหลวต่างๆ เมื่อคำสั่งถูกยกเลิกโดยสัญญาณที่มีหมายเลขเป็น N เชลล์จะตั้งค่าตัวแปร $? เป็นค่าที่มากกว่า 128 เชลล์ส่วนใหญ่ใช้ 128+N ในขณะที่ ksh93 ใช้ 256+N

หากไม่พบคำสั่ง เชลล์ควรส่งคืนสถานะเป็น 127 หากพบคำสั่งแต่ไม่สามารถดำเนินการได้ สถานะส่งคืนควรเป็น 126 [2]โปรดทราบว่านี่ไม่ใช่กรณีของเชลล์ทั้งหมด

หากคำสั่งล้มเหลวเนื่องจากข้อผิดพลาดระหว่างการขยายหรือการเปลี่ยนเส้นทาง สถานะการออกจะมากกว่าศูนย์

ภาษาซี

ภาษา การเขียนโปรแกรม Cช่วยให้โปรแกรมออกหรือกลับจากฟังก์ชันหลัก เพื่อส่งสัญญาณ ความสำเร็จหรือความล้มเหลวโดยการส่งคืนจำนวนเต็มหรือส่งคืนมาโคร EXIT_SUCCESSและEXIT_FAILUREบนระบบที่เหมือน Unix ค่าเหล่านี้จะเท่ากับ 0 และ 1 ตามลำดับ[3] โปรแกรม AC อาจใช้exit()ฟังก์ชันระบุสถานะจำนวนเต็มหรือมาโครทางออกเป็นพารามิเตอร์แรก

ค่าที่ส่งคืนจากmainจะถูกส่งผ่านไปยังexitฟังก์ชัน ซึ่งสำหรับค่าศูนย์EXIT_SUCCESSหรือEXIT_FAILUREอาจแปลเป็น "รูปแบบที่กำหนดการใช้งาน" ของการยกเลิกที่สำเร็จหรือการยกเลิกที่ไม่สำเร็จ[ จำเป็นต้องอ้างอิง ]

นอกเหนือจากศูนย์และมาโครEXIT_SUCCESSและEXIT_FAILUREมาตรฐาน C ไม่ได้กำหนดความหมายของโค้ดส่งคืน กฎสำหรับการใช้รหัสส่งคืนจะแตกต่างกันไปในแต่ละแพลตฟอร์ม (ดูหัวข้อเฉพาะแพลตฟอร์ม)

ดอส

ในคำศัพท์เฉพาะของ DOS errorlevelคือโค้ดทางออกจำนวนเต็มซึ่งส่งคืนโดยโปรแกรมปฏิบัติการหรือรูทีนย่อย ระดับข้อผิดพลาดโดยทั่วไปอยู่ในช่วงตั้งแต่ 0 ถึง 255 [4] [5] [6] [7]ในDOSมีรหัสข้อผิดพลาดเพียง 256 รหัสเท่านั้น แต่DR DOS 6.0 และสูงกว่ารองรับรหัสข้อผิดพลาด 16 บิตเป็นอย่างน้อยในCONFIG.SYS [6]ด้วย4DOS และ DR-DOS COMMAND.COMรหัสทางออก (ในแบตช์งาน) สามารถตั้งค่าได้โดยEXIT n [6]และ (ใน CONFIG.SYS) ถึงERROR= n [6]

สถานะทางออกมักจะถูกจับโดยโปรแกรมแบตช์ผ่านคำสั่งIF ERRORLEVEL [4] [6] DOS ผู้ใช้หลายคนรองรับตัวแปรสภาพแวดล้อม ที่สงวนไว้ %ERRORLVL%ซึ่งได้รับการอัปเดตโดยอัตโนมัติเมื่อส่งคืนจากแอปพลิเคชัน COMMAND.COM ภายใต้DR-DOS 7.02และสูงกว่า รองรับตัวแปรสภาพแวดล้อมเสมือน ที่คล้ายกัน %ERRORLVL% เช่นเดียวกับ%ERRORLEVEL % ใน CONFIG.SYS นั้น DR DOS 6.0 และสูงกว่ารองรับONERRORเพื่อทดสอบสถานะการโหลดและโค้ดส่งคืนของไดรเวอร์อุปกรณ์และโค้ดทางออกของโปรแกรม[6]

ชวา

ใน Java วิธีการใดๆ ก็ตามสามารถเรียกได้System.exit(int status)เว้นแต่ผู้จัดการความปลอดภัยจะไม่อนุญาตให้เรียกใช้ สิ่งนี้จะยุติ Java Virtual Machine ที่ทำงานอยู่ในปัจจุบัน "อาร์กิวเมนต์ทำหน้าที่เป็นรหัสสถานะ โดยแบบแผน รหัสสถานะที่ไม่ใช่ศูนย์บ่งชี้ถึงการสิ้นสุดที่ผิดปกติ" [8]

โอเพ่นวีเอ็มเอส

ในOpenVMSความสำเร็จจะถูกระบุด้วยค่าคี่ และความล้มเหลวจะระบุด้วยค่าคู่ ค่านี้เป็นจำนวนเต็ม 32 บิตพร้อมฟิลด์ย่อย ได้แก่ บิตควบคุม หมายเลขสิ่งอำนวยความสะดวก หมายเลขข้อความ และความรุนแรง ค่าความรุนแรงจะถูกแบ่งระหว่างความสำเร็จ (ความสำเร็จ ข้อมูล) และความล้มเหลว (คำเตือน ข้อผิดพลาด ร้ายแรง) [9]

แผน 9

ใน C ของ Plan 9 สถานะการออกจะถูกระบุโดยสตริงที่ส่งผ่านไปยัง ฟังก์ชัน exitและฟังก์ชัน mainจะเป็นประเภท void

POSIX

ในUnixและระบบที่เข้ากันได้กับ POSIX อื่นๆ กระบวนการหลักสามารถดึงสถานะการออกของกระบวนการลูกได้โดยใช้wait()ตระกูลของการเรียกระบบที่กำหนดไว้ใน wait.h [10] ในจำนวนนี้ การเรียก waitid()[11]จะดึงสถานะการออกแบบเต็ม แต่การเรียกแบบเก่าwait()และwaitpid()[12]จะดึงสถานะการออกที่มีนัยสำคัญน้อยที่สุดเพียง 8 บิตเท่านั้น

อิน เทอร์เฟซ wait()และwaitpid()ตั้ง ค่า สถานะประเภทintที่บรรจุเป็นบิตฟิลด์พร้อมข้อมูลการยุติรายการย่อยประเภทต่างๆ หากลูกยุติโดยการออก (ตามที่กำหนดโดยWIFEXITED()มาโคร ทางเลือกปกติคือว่ามันเสียชีวิตจากสัญญาณ ที่ไม่ถูกตรวจจับ ) SUSระบุว่าสถานะการออกที่มีลำดับต่ำ 8 บิตสามารถดึงข้อมูลจากค่าสถานะได้โดยใช้WEXITSTATUS()มาโคร

ในwaitid()การเรียกของระบบ (เพิ่มด้วย SUSv1) สถานะการออกลูกและข้อมูลอื่น ๆ จะไม่อยู่ในบิตฟิลด์อีกต่อไป แต่อยู่ในโครงสร้างของsiginfo_tประเภท[13]

โดยทั่วไประบบที่เข้ากันได้กับ POSIX จะใช้หลักการเป็นศูนย์หากประสบความสำเร็จ และไม่ใช่ศูนย์หากเกิดข้อผิดพลาด[14] แบบแผนบางอย่างได้พัฒนาเกี่ยวกับความหมายสัมพัทธ์ของรหัสข้อผิดพลาดต่างๆ ตัวอย่างเช่น GNU แนะนำให้สงวนรหัสที่มีการตั้งค่าบิตสูงไว้สำหรับข้อผิดพลาดร้ายแรง[3]

ระบบปฏิบัติการที่ได้มาจาก BSD ได้กำหนดชุดการตีความที่ต้องการอย่างกว้างขวาง: ความหมายสำหรับรหัสสถานะ 15 รหัส 64 ถึง 78 ได้รับการกำหนดไว้ใน sysexits.h [15]ในอดีตสิ่งเหล่านี้ได้มาจากsendmailและตัวแทนการถ่ายโอนข้อความ อื่น ๆ แต่ตั้งแต่นั้นมาก็พบว่ามีการใช้งานในโปรแกรมอื่น ๆ มากมาย[16]

คู่มือ Bash-Scripting ขั้นสูงและ /usr/include/sysexits.h มีข้อมูลบางอย่างเกี่ยวกับความหมายของรหัสสถานะการออกที่ไม่ใช่ 0 [17]

หน้าต่าง

Microsoft Windowsใช้จำนวนเต็มที่ไม่ได้ลงนามแบบ 32 บิตเป็นรหัสทางออก[18] [19]แม้ว่าตัวแปลคำสั่งจะถือว่าพวกเขาลงนามแล้วก็ตาม[20]

รหัสทางออกมีการอ้างอิงโดยตรง ตัวอย่างเช่น โดยล่ามบรรทัดคำสั่งCMD.exeในerrorlevelคำศัพท์ที่สืบทอดมาจากDOSกระบวนการ.NET FrameworkและWindows PowerShellอ้างถึงว่าเป็นExitCodeคุณสมบัติของProcessวัตถุ

ดูสิ่งนี้ด้วย

อ้างอิง

  1. ^ "ระดับข้อผิดพลาด". หน้าการเขียนสคริปต์ของ Rob van der Woude สืบค้นเมื่อ 26-08-2550 .
  2. ^ "ภาษาคำสั่งเชลล์ - สถานะการออกสำหรับคำสั่ง" กลุ่มเปิด. สืบค้นเมื่อ 2015-07-07 .
  3. ^ ab "คู่มืออ้างอิงไลบรารี GNU C 25.6.2: สถานะออก" Gnu.org . สืบค้นเมื่อ 2012-07-09 .
  4. ↑ อับ พอ ล, แมทเธียส อาร์. (1997-05-01) [1993-10-01]. BATTIPs — Tips & Tricks จาก Programmierung von Batchjobs (ในภาษาเยอรมัน) 7: ระดับข้อผิดพลาด abfragen เก็บถาวรจากต้นฉบับเมื่อ 2017-08-23 . สืบค้นเมื่อ 23-08-2017 . {{cite book}}: |work=ละเว้น ( ช่วย ) [1] [2] เก็บถาวร 11-09-2017 ที่archive.today (NB BATTIPS.TXT เป็นส่วนหนึ่งของ MPDOSTIP.ZIP ลิงก์ที่ให้มาชี้ไปยัง BATTIPS.TXT เวอร์ชันเก่าที่แปลง HTML แฟ้ม.) [3]
  5. อูเออร์, เอริค; พอล, แมทเธียส อาร์.; ฮอลล์, จิม (24-12-2558) [31-12-2546]. "ระดับข้อผิดพลาดของ MS-DOS" เก็บถาวรจากต้นฉบับเมื่อ 24-12-2015
  6. ↑ abcdef พอล, แมทเธียส อาร์. (1997-07-30) [1994-05-01]. เคล็ดลับ NWDOS — เคล็ดลับและคำแนะนำเกี่ยวกับ Novell DOS 7 รวมถึงรายละเอียด ข้อบกพร่อง และวิธีแก้ปัญหา Release 157 (ภาษาเยอรมัน) (ฉบับที่ 3) เก็บถาวรจากต้นฉบับเมื่อ 2016-11-04 . สืบค้นเมื่อ 2014-08-06 . {{cite book}}: |work=ละเว้น ( help ) (NB. NWDOSTIP.TXT เป็นงานที่ครอบคลุมบนNovell DOS 7และOpenDOS 7.01รวมถึงคำอธิบายของคุณสมบัติและคุณสมบัติภายในที่ไม่มีเอกสารจำนวนมาก ลิงก์ที่ให้มาชี้ไปยังไฟล์เวอร์ชันที่แปลง HTML ซึ่งเป็นส่วนหนึ่งของ ของMPDOSTIP.ZIPคอลเลกชัน) [4]
  7. ↑ อัล เลน, วิลเลียม; อัลเลน, ลินดา. "ระดับข้อผิดพลาดของ Windows 95/98/ME" เก็บถาวรจากต้นฉบับเมื่อ 2011-07-07
  8. "จาวา 1.6.0 API" ซัน ไมโครซิสเต็มส์ สืบค้นเมื่อ 2008-05-06 .
  9. ^ "รูปแบบ OpenVMS ของค่าสถานะการส่งคืน" H71000.www7.hp.com. เก็บถาวรจากต้นฉบับเมื่อ 2012-03-19 . สืบค้นเมื่อ 2012-07-09 .
  10. sys_wait.h  - การอ้างอิงคำจำกัดความฐาน, ข้อมูลจำเพาะ UNIX เดี่ยว , เวอร์ชัน 4 จากThe Open Group
  11. ^ waitid  – การอ้างอิงอินเทอร์เฟซระบบ, ข้อมูลจำเพาะ UNIX เดี่ยว , เวอร์ชัน 4 จากThe Open Group
  12. ^ wait  – การอ้างอิงอินเทอร์เฟซระบบ, ข้อมูลจำเพาะ UNIX เดี่ยว , เวอร์ชัน 4 จากThe Open Group
  13. ^ "2.4.3 การดำเนินการตามสัญญาณ" กลุ่มเปิด. สืบค้นเมื่อ 2019-02-08 .
  14. ^ "บทที่ 6 สถานะการออกและออก" คำถามที่พบบ่อย. org สืบค้นเมื่อ 2012-07-09 .
  15. sysexits(3) : รหัสทางออกที่ดีกว่าสำหรับโปรแกรม -  คู่มือฟังก์ชันไลบรารีFreeBSD
  16. ค้นหาโดย Google ด้วยคำว่า «"sysexits.h" site:github.com» รายงาน «เกี่ยวกับผลลัพธ์ 3,540 รายการ»; ดึงข้อมูลเมื่อ 21-02-2013.
  17. ^ "รหัสทางออกที่มีความหมายพิเศษ"
  18. "ฟังก์ชัน ExitProcess " ดึงข้อมูลเมื่อ2016-12-16 .
  19. "ฟังก์ชัน GetExitCodeProcess " สืบค้นเมื่อ2022-04-22 .
  20. "ExitCodes ใหญ่กว่า 255 เป็นไปได้ไหม" - สืบค้นเมื่อ 28-09-2552 .
ดึงมาจาก "https://en.wikipedia.org/w/index.php?title=Exit_status&oldid=1213421542"