208 / 208 kod
İşlem, sürecin sahip olmadığı ayrıcalıklar gerektirir; örneğin bir dosyanın sahibini değiştirmek, başka bir kullanıcının sürecine sinyal göndermek veya değiştirilemez bir dosyayı (chattr +i) değiştirmek. EACCES'ten farklı olarak dosya izinlerini değiştirmek sorunu çözmez: root veya ilgili capability gerekir.
Dosya veya dizin yok. Yoldaki ara dizinlerden biri eksik olduğunda, sembolik bir bağlantı var olmayan bir hedefi gösterdiğinde veya bir betiğin #! satırındaki yorumlayıcı kurulu olmadığında da görülür.
Bu kimliğe sahip bir süreç, süreç grubu veya iş parçacığı yok; örneğin zaten sonlanmış bir PID'ye kill uygulandığında.
Bir sinyal, sistem çağrısını tamamlanmadan kesti. Gerçek bir hata değildir: program çağrıyı yeniden denemeli veya sinyal işleyicisini SA_RESTART ile kurmalıdır.
Genellikle aygıttan okurken veya aygıta yazarken oluşan düşük düzeyli giriş/çıkış hatası. Disklerde genellikle bozuk sektörlere veya arızalı bir kabloya işaret eder: dmesg'i ve SMART durumunu kontrol edin. Kapanmış bir terminale yazarken de görülür.
Aygıt veya adres yok: aygıt dosyası mevcut ama arkasında donanım yok ya da bir FIFO, hiç okuyucusu yokken O_NONBLOCK ile yazma için açıldı.
exec'e geçirilen bağımsız değişken ve ortam değişkeni listesi çok büyük. Binlerce dosyaya genişleyen bir joker karakter kullanıldığında görülen klasik «Argument list too long» hatasıdır; find -exec veya xargs kullanın.
Dosya tanınan bir yürütülebilir biçimde değil: başka bir mimari için bir ikili dosya, bozuk bir dosya ya da #! satırı olmayan bir betik.
Dosya tanımlayıcısı geçersiz, zaten kapatılmış veya işleme izin vermeyen bir kipte açılmış; örneğin yalnızca okuma için açılmış bir tanımlayıcıya yazmak.
Sürecin wait veya waitpid ile bekleyebileceği alt süreci yok; çoğunlukla SIGCHLD yok sayıldığı ve alt süreçler kendiliğinden toplandığı için.
Kaynak şu anda kullanılamıyor; yeniden denemek gerekir. Engellemeyen işlemlerde henüz veri veya alan olmadığı anlamına gelir; fork'ta ise süreç veya iş parçacığı sınırına ulaşıldığını (ulimit -u veya cgroup'un pids.max değeri) gösterir.
Aynı değer:EWOULDBLOCK
İşlem için yeterli bellek yok veya sürecin bir bellek sınırı aşıldı. fork veya mmap'te nedeni overcommit politikası, cgroup sınırı ya da adres alanı yetersizliği olabilir.
İzin reddedildi: dosyanın veya yoldaki bir dizinin izinleri (her birinde yürütme izni gerekir), bir ACL, SELinux veya AppArmor ya da noexec ile yapılmış bir bağlama nedeniyle. bind de ayrıcalık olmadan 1024'ten küçük bir port kullanıldığında bu hatayı döndürür.
Bir sistem çağrısına geçersiz bir bellek adresini gösteren bir işaretçi geçirildi. Programda bir hataya işaret eder.
İşlem disk gibi bir blok aygıtı gerektiriyor ama başka türde bir dosya aldı; örneğin sıradan bir dosya -o loop olmadan bağlandığında.
Aygıt veya kaynak kullanımda. Açık dosyaları olan ya da içinde bir terminalin bulunduğu bir dosya sistemini ayırırken tipiktir; lsof veya fuser onu hangi süreçlerin kullandığını gösterir.
Bu ada sahip bir dosya, dizin veya başka bir nesne zaten var; örneğin O_EXCL ile oluştururken, mkdir'i -p olmadan kullanırken veya hedefi zaten var olan bir bağlantı oluştururken.
Farklı dosya sistemleri arasında sabit bağlantı oluşturulamaz veya dosya yeniden adlandırılamaz. mv bunu kopyalayıp silerek çözer; rename() kullanan programlar da aynısını yapmalıdır.
Aygıt yok veya işlemi desteklemiyor; örneğin çekirdek modülü yüklenmemiş bir dosya sistemi türünü bağlarken.
Yolun dizin olması gereken bir bileşeni bir dosya ya da bir dizin istendi (O_DIRECTORY) ama hedef dizin değil.
Bir dizin üzerinde, onu yazma için açmak gibi bir dosya işlemi denendi.
Bir bağımsız değişken çağrı için geçersiz: aralık dışı bir değer, uyumsuz bir seçenek birleşimi veya nesnenin desteklemediği bir işlem. Geneldir: somut durumları çağrının man sayfası listeler.
Sistem genelindeki açık dosya tablosu doldu. Sınır, sysctl'deki fs.file-max ile ayarlanır.
Süreç açık tanımlayıcı sınırına ulaştı («Too many open files»). Sınırı ulimit -n ile veya systemd'de LimitNOFILE ile yükseltin ve programın dosyaları ya da soketleri açık bırakmadığını kontrol edin.
Terminal olmayan bir şey üzerinde bir terminal işlemi (ioctl) istendi; örneğin etkileşimli bir programın çıktısı bir dosyaya veya pipe'a yönlendirildiğinde.
Yürütülebilir dosya kullanımda: çalışan bir ikili dosyaya yazılamaz, yazma için hâlâ açık olan bir dosya da çalıştırılamaz. Güncellemek için yeni bir dosya yazıp onu yeniden adlandırmak en iyisidir.
Dosya, dosya sisteminin izin verdiği en büyük boyutu (FAT32'de 4 GB) veya sürecin RLIMIT_FSIZE sınırını aşıyor.
Aygıtta yer kalmadı. df boş alan gösteriyorsa df -i ile inode'ları kontrol edin. inotify da fs.inotify.max_user_watches tükendiğinde bu hatayı döndürür.
Bir pipe, FIFO veya soket üzerinde lseek yapılamaz, çünkü bunların bir konumu yoktur.
Dosya sistemi salt okunur olarak bağlanmış. Kimse istemediği hâlde salt okunura geçtiyse bunu hataları algılayan çekirdek yapmıştır: dmesg'i kontrol edin ve fsck çalıştırın.
Bir dosyaya verilebilecek en fazla sabit bağlantı sayısı veya bazı dosya sistemlerinde bir dizindeki en fazla alt dizin sayısı aşıldı.
Diğer ucu zaten kapanmış bir pipe'a veya sokete yazıldı («Broken pipe»). Süreç, hatanın yanı sıra SIGPIPE de alır; cmd | head örneğinde olduğu gibi okuyucu önce sonlandığında bu normaldir.
Matematiksel bir fonksiyonun bağımsız değişkeni tanım kümesinin dışında; örneğin negatif bir sayının karekökü.
Bir fonksiyonun sonucu temsil edilemeyecek kadar büyük veya küçük ya da bir arabellek sonuç için yetersiz; örneğin kısa bir arabellekle çağrılan getcwd.
Bir kilitlenme önlendi: istenen kilit, örneğin fcntl ile bir dosya kilidi veya hata denetimli bir mutex, sonsuza dek beklerdi.
Aynı değer:EDEADLOCK
Yol veya bileşenlerinden biri en fazla uzunluğu aşıyor: Linux'ta genellikle ad başına 255 bayt, yol başına 4096 bayt.
Kullanılabilir kilit yok. NFS'te genellikle kilit hizmetinin (lockd veya rpc.statd) çalışmadığını gösterir.
Sistem çağrısı bu çekirdekte yok veya uygulanmamış. Daha yeni bir çekirdek için derlenmiş ikili dosyalarda ya da yeni çağrıları tanımayan konteyner seccomp profillerinde tipiktir.
Dizin boş değil; örneğin rmdir kullanırken veya var olan bir dizinin üzerine yeniden adlandırırken. İçeriğiyle birlikte silmek için rm -r kullanın.
Yol çözümlenirken çok fazla sembolik bağlantı zincirlendi, genellikle bir döngü nedeniyle; ya da bir sembolik bağlantı üzerinde O_NOFOLLOW kullanıldı.
System V ileti kuyruğunda istenen türde ileti yok.
System V IPC tanımlayıcısı (kuyruk, semafor veya paylaşılan bellek), süreç onu kullanırken kaldırıldı.
Kanal numarası aralık dışında. Linux'ta pratik kullanımı olmayan eski bir koddur.
Düzey 2 eşitlenmemiş. Linux'ta pratik kullanımı olmayan, System V'den kalma eski bir koddur.
Düzey 3 durduruldu. Linux'ta pratik kullanımı olmayan, System V'den kalma eski bir koddur.
Düzey 3 sıfırlandı. Linux'ta pratik kullanımı olmayan, System V'den kalma eski bir koddur.
Bağlantı numarası aralık dışında. Linux'ta pratik kullanımı olmayan eski bir koddur.
Protokol sürücüsü bağlı değil. Bazı Bluetooth sürücüleri gibi az sayıda alt sistem kullanır.
Kullanılabilir CSI yapısı yok. Linux'ta pratik kullanımı olmayan eski bir koddur.
Düzey 2 durduruldu. Linux'ta pratik kullanımı olmayan, System V'den kalma eski bir koddur.
Geçersiz değiş tokuş. Bazı sürücülerin ve dosya sistemlerinin kendi anlamıyla yeniden kullandığı eski bir koddur.
Geçersiz istek tanımlayıcısı. Bazı sürücülerin kendi anlamıyla yeniden kullandığı eski bir koddur.
Değiş tokuş dolu. Linux'ta pratik kullanımı olmayan eski bir koddur.
«anode» yok. Linux'ta pratik kullanımı olmayan eski bir koddur.
Geçersiz istek kodu. Eski bir koddur; bazı sürücüler desteklemedikleri komutlar için kullanır.
Geçersiz slot. Linux'ta pratik kullanımı olmayan eski bir koddur.
Hatalı yazı tipi dosyası biçimi. Linux'ta pratik kullanımı olmayan eski bir koddur.
Aygıt bir STREAM değil. Linux'un uygulamadığı System V STREAMS arayüzüne aittir.
Kullanılabilir veri yok. Linux'ta genişletilmiş öznitelik yoksa getxattr bunu döndürür; macOS'ta bu durum ENOATTR'dir.
Bir zamanlayıcının süresi doldu. STREAMS'ten gelir; Linux'ta bazı sürücüler ve io_uring, süre sınırlı işlemler için kullanır.
Linux'un uygulamadığı bir arayüz olan STREAMS'in kaynakları tükendi.
Makine ağda değil. Az kullanılan eski bir koddur.
Paket kurulu değil. Eski bir koddur; bazı alt sistemler, örneğin bir şifreleme modülü gibi bir modül eksik olduğunda kullanır.
Nesne uzakta. NFS'te başka bir sunucudan dışa aktarılan bir yolu belirtir.
Bağlantı koptu. Eski bir koddur; bazı sürücüler aygıtla bağlantı kesildiğinde kullanır.
«advertise» hatası. Linux'ta kullanılmayan, RFS'ten kalma eski bir koddur.
«srmount» hatası. Linux'ta kullanılmayan, RFS'ten kalma eski bir koddur.
Gönderme sırasında iletişim hatası. Eski bir koddur; bazı ağ ve USB sürücüleri kullanır.
Protokol hatası: karşı uç veya aygıt beklenmedik bir yanıt verdi. USB aygıtlarında ve bir alışverişin ortasında kesilen bağlantılarda görülür.
Çok atlamalı (multihop) bir erişim denendi. RFS'ten kalma eski bir koddur.
RFS'e özgü hata. Linux'ta kullanılmaz.
İleti hatalı biçimlendirilmiş veya bozuk. ext4, XFS ve Btrfs, meta veri sağlama toplamı tutmadığında bunu EFSBADCRC takma adıyla döndürür.
Aynı değer:EFSBADCRC
Değer hedef veri türüne sığmıyor; örneğin büyük dosya desteği olmadan derlenmiş 32 bitlik bir programın 2 GB'tan büyük bir dosyayı açması.
Ad ağda benzersiz değil. Eski bir koddur.
Dosya tanımlayıcısı hatalı bir durumda. ALSA ve bazı sürücüler, aygıt hazır olmadığında kullanır.
Uzak adres değişti. Eski bir koddur.
Gerekli bir paylaşılan kitaplığa erişilemiyor. a.out ikili dosyalarından kalma eski bir koddur.
Paylaşılan kitaplık bozuk. a.out ikili dosyalarından kalma eski bir koddur.
a.out ikili dosyasının .lib bölümü bozuk. Eski bir koddur.
Çok fazla paylaşılan kitaplık bağlanmaya çalışıldı. a.out'tan kalma eski bir koddur.
Paylaşılan bir kitaplık doğrudan çalıştırılamaz. a.out'tan kalma eski bir koddur.
Bayt dizisi karakter kodlaması için geçersiz; örneğin iconv ile veya çok baytlı fonksiyonlarla dönüştürülen, geçerli UTF-8 olmayan bir metin.
Kesilen çağrının yeniden başlatılması gerekir. Çekirdeğin iç kullanımı içindir ve programlara ulaşmamalıdır.
STREAMS pipe hatası. ALSA, ses aygıtı askıya alındığında bunu döndürür.
Çok fazla kullanıcı var. Disk kotası sistemi, tablosu dolduğunda döndürür ve nadir görülür.
Soket olmayan bir tanımlayıcı üzerinde soket işlemi kullanıldı.
Hedef adres eksik: bağlantısız bir soket üzerinden nereye gideceği belirtilmeden gönderim yapıldı.
İleti soket için çok büyük; örneğin parçalamaya izin verilmediğinde en büyük boyuttan veya MTU'dan büyük bir UDP datagramı.
Protokol soket türüne uymuyor.
İstenen soket seçeneği veya protokol kullanılamıyor; örneğin çekirdeğin tanımadığı bir setsockopt seçeneği.
Protokol desteklenmiyor; örneğin çekirdek modülü yüklenmediği için.
Soket türü bu adres ailesinde desteklenmiyor.
İşlem soket veya nesne tarafından desteklenmiyor. Linux'ta ENOTSUP ile aynı değere sahiptir ve birçok dosya sistemi, fallocate veya genişletilmiş öznitelikler gibi uygulamadığı işlevler için bunu döndürür.
İşlem desteklenmiyor. Linux'ta EOPNOTSUPP (95) ile aynı değere sahiptir; macOS'ta farklı kodlardır.
Protokol ailesi desteklenmiyor.
Adres ailesi desteklenmiyor; IPv6'nın devre dışı olduğu bir sistemde veya konteynerde IPv6 kullanıldığında tipiktir.
Adres ve port zaten kullanımda: başka bir süreç bu portu dinliyor ya da önceki bağlantı hâlâ TIME_WAIT durumunda. Süreci ss -ltnp veya lsof -i :PORT ile bulun ya da SO_REUSEADDR kullanın.
İstenen adres atanamıyor: IP makinenin hiçbir arayüzüne ait değil ya da giden bağlantılar için geçici portlar tükendi.
Ağ arayüzü kapalı.
Hedef ağa ulaşılamıyor, çünkü ona giden bir rota yok. Yönlendirme tablosunu ve ağ geçidini kontrol edin; IPv6 bağlantısı olmadan IPv6 üzerinden bağlanırken de olur.
Ağ bağlantıyı sıfırladı; örneğin bir keepalive başarısız olduğunda.
Bağlantı yerel tarafta iptal edildi; örneğin istemci, sunucu bağlantıyı accept ile kabul etmeden önce kapattığı için.
Karşı uç bağlantıyı bir RST ile aniden kesti («Connection reset by peer»): uzak süreç kapandı, bir güvenlik duvarı veya yük dengeleyici boşta kalan bağlantıyı kesti ya da karşı tarafın beklemediği veriler gönderildi.
Ağ işlemi için çekirdekte kullanılabilir arabellek alanı yok; genellikle yoğun trafikte veya soket kuyrukları dolu olduğunda görülür.
Soket zaten bağlı.
Soket bağlı değil: bağlanmadan önce gönderme veya alma denendi ya da bağlantı zaten kapandı. Bir FUSE bağlamasında, süreci öldüğünde «Transport endpoint is not connected» olarak görünür; fusermount -u ile ayırarak düzeltilir.
Soketin bu yönü shutdown ile kapatıldıktan sonra gönderim yapılamaz.
Çok fazla başvuru var; Linux'ta bir Unix soketi üzerinden çok fazla iç içe tanımlayıcı geçirildiğinde.
Hedef yanıt vermediği için bağlantı zaman aşımına uğradı. Genellikle paketleri sessizce düşüren bir güvenlik duvarından, kapalı bir ana bilgisayardan veya hedefe ulaşmayan bir rotadan kaynaklanır.
Hedef bağlantıyı reddetti: makine yanıt veriyor ama o portu dinleyen yok ya da bir güvenlik duvarı ret yanıtı veriyor. Hizmetin çalıştığını ve yalnızca 127.0.0.1'i değil, doğru arayüzü dinlediğini doğrulayın.
Hedef ana bilgisayar kapalı.
Ana bilgisayara rota yok: yerel ağda ARP'ye yanıt vermiyor ya da bir yönlendirici veya güvenlik duvarı ona ulaşılamadığını bildiriyor.
Sokette zaten devam eden bir işlem var; örneğin henüz tamamlanmamış, engellemeyen bir connect.
İşlem devam ediyor: engellemeyen bir connect başladı ve daha sonra tamamlanacak. Hata değildir; poll veya select ile beklemek gerekir.
Dosya tanıtıcısı eskimiş: NFS'te dosya veya dizin sunucuda silinmiş ya da değiştirilmiş. Yolu yeniden açarak veya yeniden bağlayarak çözülür.
Yapının temizlenmesi gerekiyor: dosya sistemi bozulma algıladı (ext4 ve XFS'te EFSCORRUPTED takma adıyla). Dosya sistemini ayırın ve fsck veya xfs_repair çalıştırın.
Aynı değer:EFSCORRUPTED
XENIX adlandırılmış dosyası değil. Kullanılmayan eski bir koddur.
Kullanılabilir XENIX semaforu yok. Kullanılmayan eski bir koddur.
Bir XENIX adlandırılmış dosyasıdır. Kullanılmayan eski bir koddur.
Uzak G/Ç hatası; örneğin bir I2C aygıtından veya yanıt vermeyen uzak bir diskten.
Kullanıcının veya grubun disk kotası aşıldı.
Aygıtta ortam yok; örneğin disk takılı olmayan bir sürücü veya boş bir kart okuyucu.
Ortam türü yanlış.
İşlem iptal edildi; örneğin eşzamansız bir G/Ç veya bir io_uring beklemesi.
Gerekli anahtar çekirdek anahtarlığında (keyring) yok. fscrypt veya eCryptfs gibi şifreli dosya sistemlerinde, anahtar yüklenmediğinde görülür.
Anahtarın süresi doldu. PAM ve Kerberos da parolanın veya biletin süresi dolduğunda kullanır.
Anahtar iptal edildi.
Hizmet anahtarı reddetti.
Sağlam (robust) bir mutex'in sahibi, onu serbest bırakmadan öldü. Yeni sahip, korunan durumu tutarlı hâle getirmeli ve pthread_mutex_consistent'i çağırmalıdır.
Sağlam bir mutex'in koruduğu durum kurtarılamaz, çünkü önceki sahibi öldü ve kimse durumu tutarlı olarak işaretlemedi.
Wi-Fi veya Bluetooth radyosu RF-kill ile engellendiği için işlem yapılamıyor. rfkill list'i, fiziksel anahtarı veya uçak modu tuşunu kontrol edin.
Bellek sayfasında donanım hatası var ve çekirdek onu zehirlenmiş olarak işaretledi.
Dosya türü işlem için uygun değil. macOS ve BSD'de uzun zamandır vardır; Linux'a yakın zamanda eklendi.
Çok fazla süreç var. BSD bunu süreç sınırı için tanımlar, ancak pratikte fork EAGAIN döndürür.
RPC yapısı hatalı (NFS'in kullandığı Sun RPC).
RPC sürümü uyuşmuyor (NFS'in kullandığı Sun RPC).
RPC programı sunucuda kullanılamıyor.
RPC programının sürümü uyuşmuyor.
Prosedür RPC programında yok.
Kimlik doğrulama hatası; örneğin bir NFS paylaşımını bağlarken.
İşlem için bir kimlik doğrulayıcı gerekiyor.
Aygıt kapalı.
Aygıt hatası; örneğin kâğıdı biten bir yazıcı.
Yürütülebilir dosya geçersiz.
Yürütülebilir dosya başka bir CPU türü içindir; örneğin Rosetta 2 olmadan Apple Silicon'lu bir Mac'te yalnızca x86_64 olan bir ikili dosya ya da Intel'li bir Mac'te ARM ikili dosyası.
Paylaşılan kitaplığın sürümü uyuşmuyor.
Mach-O dosyası hatalı biçimlendirilmiş veya bozuk.
Genişletilmiş öznitelik yok; Linux'taki ENODATA'nın karşılığıdır. xattr ile görülür; örneğin com.apple.quarantine özniteliği olmayan bir dosyadan onu kaldırmaya çalışırken.
MAC Framework'te bu adla kayıtlı bir politika yok.
Ağ arayüzünün çıkış kuyruğu dolu.
Yetenekler yetersiz: bir korumalı alanın (sandbox) kısıtladığı çağrılar bunu döndürür.
Süreci denetleyen terminal kapandı veya SSH oturumu kesildi. nginx, sshd veya rsyslog gibi birçok arka plan hizmeti bu sinyali yapılandırmayı yeniden okuma isteği olarak kullanır; nohup, tmux ve screen, çıkışta süreçleri kapatmasını önler.
Klavyeden Ctrl+C ile kesme. Program düzgün sonlanmak için bu sinyali yakalayabilir. Çıkış kodu 130.
Klavyeden Ctrl+\ ile çıkış. Süreci bellek dökümüyle sonlandırır; JVM ise bunu iş parçacıklarının durumunu yazdırmak için kullanır.
İşlemci geçersiz bir komutla karşılaştı: daha yeni bir CPU için derlenmiş bir ikili dosya (örneğin AVX2 veya AVX-512'yi desteklemeyen bir işlemcide bunlarla derlenmiş kod), bozuk kod veya veriye atlama.
Hata ayıklama tuzağı: hata ayıklayıcılar kesme noktaları için kullanır. Hata ayıklayıcı yokken gelirse genellikle programın kendisinin algıladığı bir hatadır; örneğin macOS'taki Swift denetimleri.
Süreç abort() çağırdı: başarısız bir doğrulama (assertion), yakalanmamış bir C++ istisnası veya C kitaplığının algıladığı bir heap bozulması («double free or corruption»). Çıkış kodu 134.
Aynı değer:SIGIOT
Veri yolu hatası: bazı mimarilerde hizalanmamış belleğe erişim ya da dosya kısaltıldığı için artık var olmayan, mmap ile eşlenmiş bir dosya bölümüne erişim. /dev/shm dolduğunda da olur.
Aritmetik istisna. Adına rağmen en yaygın nedeni tamsayının sıfıra bölünmesidir.
Süreci hemen sonlandırır: yakalanamaz, engellenemez ve yok sayılamaz. Bunu kill -9, bellek tükendiğinde çekirdeğin OOM killer'ı ve bir konteyner bellek sınırını aştığında (OOMKilled) veya SIGTERM'den sonra zamanında sonlanmadığında Docker ya da Kubernetes gönderir. Çıkış kodu 137.
Her uygulamanın kendi amacıyla kullanabileceği serbest bir sinyal; örneğin dd ilerlemesini bildirir, nginx günlükleri yeniden açar.
Bölüt ihlali («Segmentation fault»): geçersiz belleğe erişim; örneğin boş bir işaretçinin başvurusunu çözmek, dizinin sınırları dışına çıkmak veya sonsuz özyinelemeyle yığını taşırmak. Çıkış kodu 139.
Her uygulamanın kendi amacıyla kullanabileceği ikinci serbest sinyal.
Okuyucusu olmayan bir pipe'a veya sokete yazma. Okuyucunun önce sonlandığı cmd | head örneğinde normaldir; sunucular genellikle bu sinyali yok sayar ve EPIPE hatasını işler. Çıkış kodu 141.
alarm veya setitimer ile kurulan zamanlayıcının süresi doldu.
Düzgün sonlanma isteği. kill, systemctl stop, docker stop ve bir pod silindiğinde Kubernetes'in varsayılan sinyalidir; süreç bağlantılarını kapatıp çıkmalıdır. Çıkış kodu 143.
Yardımcı işlemci yığın hatası. Güncel Linux'ta kullanılmaz.
Bir alt süreç sonlandı, durdu veya devam etti. Üst süreç onu wait ile toplamalıdır; toplamazsa alt süreç zombi olarak kalır.
Aynı değer:SIGCLD
Kabuktaki fg ve bg komutlarının yaptığı gibi, durdurulmuş bir süreci sürdürür.
Süreci durdurur; yakalanamaz ve yok sayılamaz. SIGCONT ile sürdürülür.
Terminalden Ctrl+Z ile durdurma. SIGSTOP'tan farklı olarak program bu sinyali yakalayabilir.
Arka plandaki bir süreç terminalden okumaya çalıştı.
Arka plandaki bir süreç, stty tostop etkinken terminale yazmaya veya terminalin ayarlarını değiştirmeye çalıştı.
Bir sokete acil (bant dışı) veri geldi. Go bunu goroutine'leri kesmek için dahili olarak kullanır.
Sürecin CPU süresi sınırı aşıldı (ulimit -t).
Sürece izin verilen en büyük dosya boyutu aşıldı (ulimit -f).
Yalnızca sürecin CPU süresini sayan sanal zamanlayıcının süresi doldu.
Profil oluşturucuların kullandığı profil zamanlayıcısının süresi doldu.
Terminal penceresinin boyutu değişti; tam ekran programlar kendilerini yeniden çizmek için kullanır.
O_ASYNC ile yapılandırılmış bir tanımlayıcıda G/Ç kullanılabilir. Linux'ta SIGPOLL aynı sinyaldir.
Aynı değer:SIGPOLL
Bir UPS yazılımının init sistemine bildirdiği güç kesintisi.
Hatalı sistem çağrısı. Günümüzde olağan nedeni, konteynerlerde olduğu gibi çağrıyı engelleyen bir seccomp filtresidir.
Öykünme tuzağı (EMT). macOS ve BSD'de vardır, ancak x86 ve ARM üzerindeki Linux'ta yoktur.
macOS ve BSD terminalinde Ctrl+T ile bilgi isteği; birçok komut ilerlemesini göstererek yanıt verir.
Komut başarıyla tamamlandı. Başarı anlamına gelen tek koddur: diğer her değer bir hatayı gösterir.
Genel hata; ne anlama geldiğine her program kendisi karar verir. Ayrıntı genellikle komutun stderr'e yazdıklarındadır. grep ve diff bunu başka bir anlamda kullanır: «eşleşme bulunamadı» veya «dosyalar farklı».
Kabuğun yerleşik bir komutunun yanlış kullanımı veya betikte sözdizimi hatası. Birçok program da geçersiz seçenekler için, grep ise gerçek hatalar için kullanır.
Komut yanlış kullanıldı: bağımsız değişkenler eksik veya fazla ya da bir seçenek hatalı.
Giriş verilerinin biçimi hatalı.
Bir giriş dosyası yok veya okunamıyor.
Belirtilen kullanıcı yok; özellikle e-posta programları kullanır.
Ana bilgisayar adı yok.
Gerekli bir hizmet kullanılamıyor ya da başka bir kategoriye uymayan bir şey başarısız oldu.
Programın iç hatası.
İşletim sistemi hatası; örneğin fork yapılamaması veya pipe oluşturulamaması.
/etc/passwd gibi bir sistem dosyası eksik veya hatalı.
Çıktı dosyası oluşturulamıyor.
Bir dosya okunurken veya yazılırken giriş/çıkış hatası.
Geçici hata: daha sonra yeniden denemek gerekir. E-posta sunucuları iletiyi kuyrukta bırakmak için kullanır.
Uzak sistem protokole uymayan bir yanıt verdi.
İşlem için izinler yetersiz.
Yapılandırmada bir hata var.
Belirtilen süreyi aştığı için timeout komutu onu sonlandırdı.
docker run, konteyneri çalıştırmadan önce kendisi başarısız oldu; örneğin hatalı bir seçenek veya daemon hatası nedeniyle. GNU timeout da başarısız olan kendisi olduğunda bunu döndürür.
Dosya var ama çalıştırılamıyor: yürütme izni eksik, bir dizin ya da başka bir mimari için bir ikili dosya. Docker'da konteynerin komutu yürütülebilir değil.
Komut bulunamadı: kurulu değil, PATH'te değil veya adı yanlış yazılmış. Betiklerde #! satırındaki yorumlayıcı eksik olduğunda da görülür; Docker'da ise konteynerin komutu imajda olmadığında.
128'den büyük kodlar süreci bir sinyalin sonlandırdığını gösterir, ancak 128 hiçbir sinyale karşılık gelmez. Git bunu tüm ölümcül hataları («fatal: …») için kullanır; örneğin var olmayan bir depo veya klonlama sırasında kimlik doğrulama hatası.
Çıkış kodu aralığın dışına çıktı: yalnızca 8 bit korunduğu için exit -1, 255 olarak gelir. ssh de bağlantı veya kimlik doğrulama başarısız olduğunda, uzak komutun kodundan ayırt etmek için bunu döndürür.
Linux değerleri x86, x86-64 ve ARM içindir; Alpha, MIPS, SPARC ve PA-RISC bazı errno değerlerini ve sinyalleri farklı numaralandırır. İngilizce iletiler, glibc'de strerror ve strsignal'ın gösterdikleridir; farklı olduklarında macOS'takiler de verilir. 128'den büyük çıkış kodları 128 artı sinyal numarası olarak yorumlanır; bu, bash, Docker ve Kubernetes'in kuralıdır.
Nasıl çalışır
Linux'ta bir sistem çağrısı başarısız olduğunda -1 döndürür ve errno değişkenine nedenini belirten bir sayı yazar: 2, ENOENT, yani dosya yok; 13, EACCES, yani izin reddedildi. strerror bu sayıyı ekranda görülen metne, örneğin «No such file or directory» metnine dönüştürür. Python bunu [Errno 13] olarak, Node.js code: 'ECONNREFUSED' olarak, Go, Rust veya Java ise aynı metinle gösterir. 1'den 34'e kadar olan numaralar özgün Unix'ten gelir ve tüm sistemlerde aynıdır; sonrakileri her sistem kendi bildiği gibi numaralandırdı, bu yüzden ECONNREFUSED Linux'ta 111, macOS'ta 61'dir. Ad taşınabilir; numara değil.
Sinyaller, çekirdeğin veya başka bir sürecin bir sürece gönderdiği bildirimlerdir: Ctrl+C'ye basıldığında SIGINT, sürecin sonlanmasını istemek için SIGTERM, onu sormadan sonlandırmak için SIGKILL, geçersiz belleğe eriştiğinde SIGSEGV. Her birinin varsayılan bir eylemi vardır ve neredeyse hepsi başka bir şey yapmak için yakalanabilir. Bir sinyal bir süreci öldürdüğünde kabuk, çıkış kodu olarak 128 artı sinyal numarasını bildirir: 137 SIGKILL (9), 139 SIGSEGV (11) ve 143 SIGTERM (15) demektir. Docker ve Kubernetes de aynı kuralı kullanır.
Çıkış kodu, bir programın sonlanırken bıraktığı sayıdır: 0 başarı, diğer her değer hata demektir. Yalnızca 8 bit korunur, bu yüzden 0 ile 255 arasındadır. Pek az kural vardır: 126 ve 127'yi kabuk, komutu çalıştıramadığında veya bulamadığında kullanır; 64 ile 78 arasını BSD'nin sysexits.h dosyası tanımlar; gerisine her program kendisi karar verir, örneğin hiçbir şey bulamadığında 1 döndüren grep.
Örnekler
Last State: Terminated · Reason: OOMKilled · Exit Code: 137137 = 128 + 9 · SIGKILLKonteyner bellek sınırını aştı ve çekirdek onu SIGKILL ile öldürdü. resources.limits.memory'deki sınırı yükseltmek veya sürecin neden bu kadar bellek tükettiğini araştırmak gerekir; yeniden başlatmak sorunu çözmez.Error: connect ECONNREFUSED 127.0.0.1:5432ECONNREFUSED · Linux 111 · macOS 61 · Connection refusedNode.js PostgreSQL'e bağlanamadı, çünkü 5432 numaralı portu dinleyen yok. Uygulama bir konteynerde çalışıyorsa 127.0.0.1 makinenin değil konteynerin kendisidir: veritabanı hizmetinin adını kullanmak gerekir.OSError: [Errno 48] Address already in useEADDRINUSE · Linux 98 · macOS 4848, programın macOS'ta çalıştığını ele verir: Linux'ta aynı hata 98'dir. Her iki durumda da portu başka bir süreç kullanıyor; hangisi olduğunu lsof -i :PORT gösterir.Kullanım senaryoları
- Yalnızca errno numarasını veya adını gösteren Python, Node.js, Go veya C uygulamalarındaki bir hatayı anlamak.
- Bir Docker konteynerinin neden kapandığını veya bir Kubernetes pod'unun neden yeniden başladığını çıkış kodundan bulmak.
- 35'ten itibaren Linux'takiyle örtüşmeyen bir macOS errno numarasını doğru ada çevirmek.
- Başarısız olan bir betiğin, cron görevinin veya CI işinin çıkış kodunu yorumlamak.
- kill ile hangi sinyalin gönderileceğini seçmek ve süreç onu yakalamazsa ne yapacağını bilmek.
- Numara yerine ada göre karşılaştıran taşınabilir bir hata işleme kodu yazmak.
Sık sorulan sorular
Exit code 137 ne anlama gelir?
Sürecin 9 numaralı sinyal olan SIGKILL ile sonlandığı anlamına gelir (128 + 9). En yaygın nedeni bellektir: konteyner sınırını aşmıştır ve Kubernetes bunu OOMKilled olarak bildirir ya da çekirdeğin OOM killer'ı bu süreci seçmiştir; bu da dmesg'de «Out of memory: Killed process» olarak kalır. docker kill ile veya süreç SIGTERM'den sonra süresi içinde sonlanmadığında da olur: docker stop'ta 10 saniye, Kubernetes'te 30 saniye.
SIGTERM ile SIGKILL arasındaki fark nedir?
SIGTERM sürecin sonlanmasını ister ve süreç, bağlantıları kapatmak, verileri kaydetmek ve çıkmak için onu yakalayabilir. SIGKILL ile süreci çekirdek anında sonlandırır ve süreç hiçbir şey yapamaz. Doğrusu SIGTERM göndermek, birkaç saniye beklemek ve süreç hâlâ çalışıyorsa ancak o zaman SIGKILL'e başvurmaktır; systemd, docker stop ve Kubernetes de böyle yapar.
Aynı errno neden macOS'ta başka bir numaraya sahip?
Çünkü POSIX adları tanımlar ama numaraları tanımlamaz. 1'den 34'e kadar olanları tüm sistemler özgün Unix'ten devraldı; sonrasında macOS'un türediği BSD ile Linux'un izlediği System V bunları ayrı ayrı numaralandırdı. Bu yüzden karşılaştırmayı her zaman numarayla değil, adla yapmak gerekir: Python'da errno.ECONNREFUSED, Node.js'te err.code veya C'de ilgili sabit ile.
EACCES ile EPERM arasındaki fark nedir?
EACCES («Permission denied»), dosyanın veya yoldaki bir dizinin izinlerinin buna izin vermediği ya da bir ACL'nin veya SELinux'un engellediği anlamına gelir: chmod, chown veya ilgili politikayla çözülür. EPERM («Operation not permitted») ise izinlerden bağımsız olarak işlemin kendisinin ayrıcalık gerektirdiği anlamına gelir; örneğin bir dosyanın sahibini değiştirmek veya başka bir kullanıcının sürecini öldürmek: root, bir capability ya da değiştirilemezlik gibi bir özniteliğin kaldırılması gerekir.
Bir komutun veya konteynerin çıkış kodunu nasıl görürüm?
bash ve zsh'de echo $? son komutun kodunu gösterir; PowerShell'de $LASTEXITCODE. Docker'da docker ps -a bunu STATUS sütununda «Exited (137)» gibi gösterir. Kubernetes'te kubectl describe pod bunu «Last State: Terminated» altında, OOMKilled veya Error gibi nedeniyle birlikte gösterir.