Cegah pesan "<aplikasi> berhenti secara tak terduga" di sigquit


18

Saya membunuh proses Python dengan SIGQUIT dengan menekan Ctrl\kadang-kadang (biasanya saya sendiri yang nakal). Bisakah saya mencegah pesan "Python berhenti tiba-tiba"? Saya tahu saya bisa saja melarikan diri, jadi tidak terlalu buruk.

"Python berhenti secara tak terduga."  dialog


1
Kenapa kamu tidak menggunakan control-C saja? SIGTERM tidak menyebabkan pesan.
ughoavgfhw

@ughoavgfhw Saya sedang mengerjakan REPL yang terkadang menempatkan terminal dalam mode mentah, jadi program saya menerima ctrl-c sebagai keystroke sebagai gantinya. Juga kadang-kadang saya memiliki masalah utas, sehingga utas yang seharusnya mati tidak, dan dengan Python ctrl-c tampaknya hanya untuk membunuh utas utama. (Saya tahu saya harus menggunakan t.daemon = Trueini, dan saya sebagian besar) Untuk berbagai alasan, kadang-kadang saya perlu menggunakan ctrl- \.
Thomas

Jika itu adalah kode Anda maka masalah pengembangan kode Anda harus berurusan dengan sinyal
user151019

@ Mark setuju - ini adalah masalah sementara saya belum memiliki perilaku yang bekerja dalam kasus tepi tertentu.
Thomas

Jawaban:


18

Jika Anda tidak pernah ingin melihat dialog laporan kerusakan, ada preferensi untuk menonaktifkannya:

defaults write com.apple.CrashReporter DialogType none

Logout dan kembali untuk menerapkan perubahan.


2
Logout tidak diperlukan dalam kasus saya.
Cory Klein

6
Apakah ada cara untuk melakukan defaults write com.apple.CrashReporter DialogType noneselektif hanya untuk satu aplikasi tertentu?
SexyBeast

Bagi saya perilaku ini tidak berubah (setelah memasukkan perintah) sampai keluar dan masuk.
r_alex_hall

12

Anda juga dapat membuat pesan muncul sebagai pemberitahuan:

defaults write com.apple.CrashReporter UseUNC 1

2
Seperti yang ini. Di macOS Sierra, sebuah spanduk pemberitahuan meluncur di kanan atas layar dan akan menghilang dengan sendirinya tetapi jika Anda mengkliknya, Anda mendapatkan jendela penuh tempat sampah. Jadi ini sempurna. Jauh lebih tidak mencolok tetapi membiarkan opsi terbuka.
clearlight

3

Perilaku default saat menerima SIGQUIT adalah membuang core dan keluar; reporter macet dipicu sebagai bagian dari proses ini.

Mulai dengan 10.5 (?) Cukup dengan mengatur pengendali sinyal untuk SIGQUIT harus cukup untuk menghindari reporter crash; Anda mungkin ingin pawang juga memanggil keluar.

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()

Kode di atas diuji pada 10.8.5 /usr/bin/pythondan 2.7.2.


1
Apakah ada cara untuk melakukan defaults write com.apple.CrashReporter DialogType noneselektif hanya untuk satu aplikasi tertentu?
SexyBeast
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.