Neden çıkış kodu $?, Perl'de sekiz ile değiştirdiğimde, -1 olmasını beklediğimde 255 aldım?Perl'de -1 yerine çıkış kodu 255 neden?
cevap
'wait()' tarafından döndürülen çıkış durumu 16 bitlik bir değerdir. Bu 16 bitten yüksek sıralı 8 bit, 'exit()' ile döndürülen değerin düşük sıra 8 bitinden veya main()
'dan döndürülen değerden gelir. Program doğal olarak ölürse, 16'nın düşük dereceli 8 biti sıfırdır. Program, sinyal nedeniyle ölürse, düşük sıra 8 bit, sinyal numarasını kodlar ve bir çekirdek dökümü olup olmadığını belirten bir bit. Bir sinyal ile, çıkış durumu sıfır olarak kabul edilir - kabuk gibi düşük dereceli bitleri bir hata olarak yorumlama eğilimi olan programlar gibi.
15 8 7 0 Bit Position
+-----------------+
| exit | signal |
+-----------------+
En makineleri aslında 32-bit tamsayı, 16-bit değeri saklamak ve bu işaretsiz aritmetik ile işlenir. İşlemin 'exit (-1)' ile çıkması durumunda, 16 bitlik yüksek bit 8 biti 1 olabilir, ancak 8 bit ile sağa kaydırıldığında 255 olarak görünecektir.
Değeri gerçekten imzalı bir miktara dönüştürmek istiyorsanız, 16 bit'e göre biraz bitlikli bir işlem yapmanız gerekir.
$status >>= 8;
($status & 0x80) ? -(0x100 - ($status & 0xFF)) : $status;
Hangi yolu değiştiriyorsunuz? Lütfen bir kod örneği verin. Ayrıca
:
perldoc -f system
$ ile ne yapacağını çok kolay bir anlama örnek verir? Ayrıca
, http://www.gnu.org/s/libc/manual/html_node/Exit-Status.htmlÇık değerleri Sizin aslında biraz fikir vermelidir bilgisayar tarafından saklanır nasıl negatif değerler ile kombine şiftinglerde 0 ve 255 arasında olmalıdır.
Ben 8 bit – syker
Perl wait(2)
aşağıdaki açıklama vardır WEXITSTATUS
makro Cı çalışma zamanı kütüphanesi ile aynı şekilde bir alt işlemi çıkış kodunu verir: Burada
WEXITSTATUS(status) evaluates to the least significant eight bits of the return code of the child which terminated, which may have been set as the argument to a call to exit() or as the argument for a return statement in the main program. This macro can only be evaluated if WIFEXITED returned non-zero.
önemli bir kısmı sekiz bit en az önemli olup.
$? The status returned by the last pipe close, backtick (‘‘) com- mand, successful call to wait() or waitpid(), or from the sys- tem() operator. This is just the 16-bit status word returned by the wait() system call (or else is made up to look like it). Thus, the exit value of the subprocess is really ("$? >> 8"), and "$? & 127" gives which signal, if any, the process died from, and "$? & 128" reports whether there was a core dump.
çıkış kodu negatif sayılar için burada hiçbir özel işlem yok: aşağıdaki gibi perlvar
adam sayfa $?
açıklanır 255 çıkış kodu alıyorsanız nedeni budur.
Awesome cevabı ile onu değiştiriyordum! – syker
- 1. Neden Color.FromArgb (255, 255, 255, 255)! = Color.White?
- 2. Virtualbox sanal makinesi, başlangıçta çıkış kodu 1
- 3. Neden foreach, 1 yerine 2 sayısını reddeder?
- 4. Komut/usr/bin/lipo, çıkış kodu 1 hatasıyla başarısız oldu
- 5. Bağlayıcı Komut çıkış kodu 1 ile başarısız oldu: simge
- 6. Chisel.TestApplicationException: test uygulaması çıkış - çıkış kodu 139
- 7. Xcode 4.2: Derleme hatası (Command/Developer/usr/bin/ibtool, çıkış kodu 255 ile başarısız oldu)
- 8. Eski perlde 'experimental' uyarısı yok
- 9. Windows'ta cmd olarak çıkış çıkış kodu yazdır
- 10. ExitCodes, 255'ten büyük mü?
- 11. PhantomJS Crash - Çıkış Kodu 126
- 12. Neden çıkış seçmeliyim? İşte
- 13. Neden Bu Hedef C/C++ Kodu main.m yerine main.m gerektiriyor?
- 14. Objective-C'de, bu artış neden 1 yerine 4 ile mi?
- 15. Neden strtotime (1 Ocak 1970) PHP'de 0 yerine -3600 döndürür?
- 16. Kullanıcılar neden i ++ yerine i = i + 1 kullanıyor?
- 17. İşlenmeyen Özel Durum Yürütüldüğünde Çıkış Kodu Yürütülüyor mu?
- 18. sqlite3_prepare_v2 dönen hata 1 kodu
- 19. neden yerine varchar değişken ikili
- 20. Bir istisna atarken çıkış kodu nasıl belirlenir?
- 21. neden a + 1 == * (a + 1)?
- 22. neden sizeof ("- 2147483648") - 1
- 23. Çıkış kodu içeren bir programdan nasıl çıkış yapılır: C#
- 24. Python'da sys.exit() için 0-255 aralık sınırlaması nasıl atlanır?
- 25. MySQL: neden varchar (254) ve varchar değil (255)?
- 26. cuda deviceQuery döner 1 yerine 2
- 27. Xcode Hata: Komut/usr/bin/codesign Ben bu hatayı alıyorum neden hiçbir fikrim yok çıkış kodu 1
- 28. MSBuild exec görev, çıkış kodu boş
- 29. Symfony2 komutunda çıkış durum kodu nasıl ayarlanır?
- 30. Bash komut dosyasında çıkış kodu nasıl yazılır
Belki de çıkış kodunun neden -1 olmasını beklediğinizi açıklayabilirsiniz. –
Lütfen Perl kodunu göster. Hangi program/betik çıkış kodunu yayar, hangi senaryoda rapor eder? – lexu
'perl -e" exit -1 "; echo $? '=> 255. – jrockway