Unix Geçmişi: dönüş kodu sekizlik?


10

Bugün şu görevden atılmıştım gdb:

Program exited with code 0146.

gdbdönüş kodunu sekizlik olarak yazdırır ; neden bulduğuma bakıyorum: http://comments.gmane.org/gmane.comp.gdb.devel/30363

Ama bu özellikle tatmin edici bir cevap değil. Bazı hızlı googling tarihi ortaya koymadı, bu yüzden SO'da birisinin arka hikayeyi bilmesini umuyordum.

Biraz ilgili bir soru, dönüş kodunu sekizlik olarak nasıl görüntüleyebilirdi? Belki daha eski makineler her zaman dönüş kodunu yazdırdı?

$ printf %o\\n $?

Oldukça garip :)


$?dönüş kodu için kabuğun değeridir ve birer rakam ise (veya örnek de cmd gdb destekliyor?). GDB'nin neden sekizli olarak rapor ettiğini bilmiyorum. Benim çözümüm man asciisekizli değerlerin ne anlama geldiğini görmek için 'ol' elde etmektir . İlginç bir soru, yaptığınız gibi diğer programlardan sekizlik değerlerle de karşılaşıyorsunuz. Belki de Kernighan ve Pike'ın 'Unix Programlama Çevresi'nde tartışılmaktadır. İyi şanslar.
shellter

Çıkış durumu bir rakamdan daha büyük olabilir, aslında bir bayttır. Ayrıca, man asciisekizliği ondalık sayıya dönüştürmenin bir yararı olmaz. bcdaha iyi bir seçim olurdu.
jlliagre

2
Dönüş kodu ondalık veya sekizlik değil bir sayıdır . Program bir durum döndürür (bir bayt). Bekleme (3) veya kabilesiyle, ana süreç, sürecin neden çıktığını (normalde, yani çıkış (2) çağırarak gönüllü olarak; bir sinyal tarafından öldürüldü, ...) hakkında birçok bilgi bulabilir
vonbrand

Yanıtlar:


6

Sekizli gösterim, en yaygın olarak kullanılan küçük değerler için çıkış kodunun yorumlanmasını kolaylaştırır. Bir bayt olan bu sayı ondalık olarak yazdırılırsa, hangi sinyalin bir işlemi kesintiye uğrattığını tespit ederse, sekizlikken biraz hesaplama gerektirir, bunlar şu şekilde okunabilir:

  • durumu 5 ile işlem çıktığında, gdbgörüntüler 05hiç fark etmez
  • Bir süreç sonlandığında bir var çünkü SIGINT( Control+ C), gdbekranlar 0202daha kolay daha sinyal 2. olarak tanıması 130.

Dahası, çıkış durumu da biraz maske olabilir ve bu durumda sekizli (en azından bu günlerden birkaç yıl önce daha yaygın olana alıştığınızda) zihinsel olarak bitlere dönüştürmek daha kolaydır. onaltılık, tıpkı örneğin chmodhala dosya izinlerini temsil sekizlik bir sayıyı kabul ediyoruz: 0750 = 111 101 000 = rwx r-x ---.


muhtemelen bunu sormak için yanlış yer, ama GDB tarafından verilen bir sayının sekizli mi yoksa ondalık mı olduğunu anlamanın kolay bir yolu var mı?
marinara

3
Kural sıfır (0) ile başlıyorsa sekizliktir.
jlliagre

3

Bu metnin bir kopyası yok ve sadece google kitaplarında bulunan kısa bulanıklığı okudum ama. X / Açık Taşınabilirlik kılavuzuna göre System V Spesifikasyon Komutları ve Yardımcı Programları pg 283 (google kitaplarına göre)

bir uygulama anormal olarak sonlanırsa, çıkış durumu sekizlik 0200 + durumudur ve ortak 'durum' değerlerinin bir listesi vardır (muhtemelen sekizlik olarak da verilir).

Yani zayıf bir mans hata mesajıdır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.