ประวัติ Unix: ส่งคืนรหัสฐานแปด?


10

วันนี้ฉันถูกโยนทิ้งโดยgdb:

Program exited with code 0146.

gdbพิมพ์รหัสส่งคืนในฐานแปด ; ดูสาเหตุที่ฉันพบ: http://comments.gmane.org/gmane.comp.gdb.devel/30363

แต่นั่นไม่ใช่คำตอบที่น่าพอใจอย่างยิ่ง googling ที่รวดเร็วบางแห่งไม่เปิดเผยประวัติดังนั้นฉันจึงหวังว่าจะมีใครรู้เรื่องนั้นบ้าง

คำถามที่ค่อนข้างจะเกี่ยวข้องใครจะดูรหัสส่งคืนในฐานแปดได้อย่างไร บางทีเครื่องรุ่นเก่า ๆ มักพิมพ์รหัสส่งคืนหรือไม่

$ printf %o\\n $?

ค่อนข้างน่าอึดอัดใจ :)


$?คุ้มค่าของเปลือกสำหรับรหัสการส่งคืนและเป็นหลักทศนิยม (หรือไม่ gdb สนับสนุนตัวอย่างของคุณ cmd ยัง?) ไม่ทราบสาเหตุที่ gdb รายงานเป็นเลขฐานแปด ทางออกของฉันคือออก 'ol man asciiเพื่อดูว่าค่าฐานแปดหมายความว่าอย่างไร คำถามที่น่าสนใจในขณะที่คุณทำงานเป็นค่าฐานแปดจากโปรแกรมอื่น อาจจะมีการกล่าวถึงใน Kernighan และ Pike's 'Unix Programming Envioronment' โชคดี.
shellter

สถานะการออกสามารถมากกว่าหนึ่งหลักได้จริง ๆ แล้วเป็นไบต์ นอกจากนี้man asciiจะไม่มีประโยชน์ในการแปลงเลขฐานแปดให้เป็นทศนิยม bcจะเป็นทางเลือกที่ดีกว่า
jlliagre

2
โค้ดส่งคืนคือตัวเลขไม่ใช่ทศนิยมหรือฐานแปด โปรแกรมส่งคืนสถานะ (หนึ่งไบต์) ด้วยการรอ (3) หรือเผ่ากระบวนการหลักสามารถค้นหาข้อมูลจำนวนมากเกี่ยวกับสาเหตุที่กระบวนการออก (โดยปกติคือสมัครใจโดยการเรียกทางออก (2); ฆ่าโดยสัญญาณ, ... )
vonbrand

คำตอบ:


6

การแทนค่าเลขฐานแปดช่วยลดการตีความรหัสออกสำหรับค่าขนาดเล็กซึ่งใช้กันมากที่สุด หากหมายเลขนี้ซึ่งเป็นไบต์ถูกพิมพ์เป็นทศนิยมการค้นหาว่าสัญญาณใดขัดจังหวะกระบวนการจะต้องมีการคำนวณเล็กน้อยในขณะที่อยู่ในฐานแปดพวกเขาสามารถอ่านได้ตามที่:

  • กระบวนการออกจากสถานะ 5 gdbแสดง05ว่าไม่มีความแตกต่าง
  • กระบวนการออกเพราะมันได้SIGINT( Control+ C) gdbแสดง0202ซึ่งจะง่ายต่อการรับรู้เป็นสัญญาณ # 2 130กว่า

ยิ่งไปกว่านั้นสถานะการออกอาจเป็นรูปแบบบิตและในกรณีเช่นนี้ octal (อย่างน้อยเมื่อคุณคุ้นเคยกับมันซึ่งเป็นเรื่องธรรมดาเมื่อสองสามสิบกว่าปีก่อน) ง่ายกว่าที่จะแปลงจิตใจเป็นบิตมากกว่าทศนิยมหรือแม้แต่ เลขฐานสิบหกเช่นเดียวตัวอย่างเช่นยังคงยอมรับตัวเลขฐานแปดจะเป็นตัวแทนของสิทธิ์ของแฟ้ม:chmod0750 = 111 101 000 = rwx r-x ---


อาจเป็นสถานที่ที่ผิดที่จะถามสิ่งนี้ แต่มีวิธีที่ง่ายที่จะบอกว่าตัวเลขที่กำหนดโดย GDB เป็นเลขฐานแปดหรือทศนิยมหรือไม่?
marinara

3
การประชุมคือถ้าเริ่มต้นด้วยศูนย์ (0) มันเป็นแปด
jlliagre

3

ฉันไม่มีสำเนาของข้อความนี้และเพิ่งอ่านข้อความสั้น ๆ ที่มีอยู่ใน Google หนังสือ แต่ อ้างอิงจากคำแนะนำในการพกพา X / Open System V ข้อมูลจำเพาะคำสั่งและยูทิลิตี้ pg 283 (ตาม google หนังสือ)

หากแอปพลิเคชั่นหยุดทำงานอย่างผิดปกติสถานะการออกของมันคือสถานะเลขฐานแปด 0200 + และมีรายการของค่า 'สถานะ' ทั่วไป (ซึ่งอาจได้รับในรูปแบบเลขฐานแปด)

ดังนั้นจึงเป็น / เป็นข้อความแสดงข้อผิดพลาดของชายที่ไม่ดี

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.