Sigquit'te "<application> beklenmedik şekilde çık" mesajını engelle


18

Ctrl\Bazen basarak Python süreçlerini SIGQUIT ile öldürüyorum (genellikle yanlış davrananlarım). "Python beklenmedik biçimde sonlandırılıyor" iletisini engelleyebilir miyim? Kaçmaya vurabileceğimi biliyorum, o kadar da kötü değil.

"Python beklenmedik şekilde sonlandı."  diyalog


1
Bunun yerine neden control-C kullanmıyorsunuz? SIGTERM mesaja neden olmaz.
ughoavgfhw

@ughoavgfhw Bazen terminali ham moda geçiren bir REPL üzerinde çalışıyorum, bu yüzden programım ctrl-c'yi tuş vuruşu olarak alıyor. Ayrıca bazen iplik sorunları, öyle ki ölmesi gereken iş parçacıkları yok ve Python ctrl-c sadece ana iş parçacığını öldürmek gibi görünüyor. (Bunları kullanmam gerektiğini biliyorum t.daemon = True, ve çoğunlukla da öyleyim) Çeşitli nedenlerle, bazen ctrl- \ kullanmam gerekir.
Thomas

Kodunuz buysa, bir geliştirme sorunu kodunuzun sinyallerle uğraşması gerekir
user151019

@Mark Kabul Edildi - bu bazı durumlarda henüz bu davranış çalışmadı iken bir sorun oldu.
Thomas

Yanıtlar:


18

Kilitlenme raporu iletişim kutularını asla görmek istemiyorsanız, devre dışı bırakma tercihi vardır:

defaults write com.apple.CrashReporter DialogType none

Değişiklikleri uygulamak için oturumu kapatıp tekrar açın.


2
Benim durumumda oturumu kapatmak gerekli değildi.
Cory Klein

6
defaults write com.apple.CrashReporter DialogType noneSadece belirli bir uygulama için seçmeli olarak yapmanın bir yolu var mı ?
SexyBeast

Benim için bu davranış (komut girdikten sonra) oturumu kapatıp oturum açana kadar
değişmedi

12

Bunun yerine iletinin bildirim olarak görünmesini de sağlayabilirsiniz:

defaults write com.apple.CrashReporter UseUNC 1

2
Bunun gibi. MacOS Sierra'da ekranın sağ üst köşesinde bir bildirim başlığı kayar ve kendi kendine kaybolur, ancak tıkladığınızda orijinal tam kilitlenme döküm penceresini alırsınız. Bu mükemmel. Çok daha az rahatsız edici ama seçenekleri açık bırakır.
clearlight

3

SIGQUIT alırken varsayılan davranış, çekirdeği boşaltmak ve çıkmaktır; Çökme habercisi bu sürecin bir parçası olarak tetiklenir.

10.5 (?) İle başlayarak SIGQUIT için sadece bir sinyal işleyici ayarlamak, çökme habercisini önlemek için yeterli olmalıdır; muhtemelen işleyicinin çıkış çağırmasını da isteyeceksiniz.

import signal, sys, os

def sigquit_handler(signum, frame):
    print 'SIGQUIT received; exiting'
    sys.exit(os.EX_SOFTWARE)

signal.signal(signal.SIGQUIT, sigquit_handler)

# Do your normal work instead of this
print 'Waiting for a signal...'
signal.pause()

Yukarıdaki kod /usr/bin/python, 2.7.2 olan 10.8.5 üzerinde test edilmiştir .


1
defaults write com.apple.CrashReporter DialogType noneSadece belirli bir uygulama için seçmeli olarak yapmanın bir yolu var mı ?
SexyBeast
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.