Ngăn chặn tin nhắn <ứng dụng> thoát bất ngờ tin nhắn trên sigquito


18

Tôi giết các tiến trình Python bằng SIGQUIT bằng cách Ctrl\đôi khi nhấn (thường là do chính tôi đang làm sai). Tôi có thể ngăn thông báo "Python thoát bất ngờ" không? Tôi biết tôi chỉ có thể đánh thoát, vì vậy nó không quá tệ.

"Python bỏ việc bất ngờ."  hộp thoại


1
Tại sao bạn không sử dụng control-C thay thế? SIGTERM không gây ra thông điệp.
ughoavgfhw

@ughoavgfhw Tôi đang làm việc trên REPL, đôi khi đặt thiết bị đầu cuối ở chế độ thô, vì vậy chương trình của tôi nhận ctrl-c làm tổ hợp phím thay thế. Ngoài ra, đôi khi tôi gặp vấn đề về luồng, như các luồng không nên chết và trong ctrl-c của Python dường như chỉ giết chết luồng chính. (Tôi biết tôi nên sử dụng t.daemon = Truenhững thứ này và tôi là phần lớn) Vì nhiều lý do, đôi khi tôi cần sử dụng ctrl- \.
Thomas

Nếu đó là mã của bạn thì vấn đề phát triển, mã của bạn phải xử lý các tín hiệu
user151019

@Mark Đồng ý - đây là một vấn đề trong khi tôi chưa có hành vi đó hoạt động trong các trường hợp cạnh nhất định.
Thomas

Câu trả lời:


18

Nếu bạn không bao giờ muốn xem các hộp thoại báo cáo sự cố, có một tùy chọn để vô hiệu hóa chúng:

defaults write com.apple.CrashReporter DialogType none

Đăng xuất và quay lại để áp dụng các thay đổi.


2
Đăng xuất không cần thiết trong trường hợp của tôi.
Cory Klein

6
Có cách nào để defaults write com.apple.CrashReporter DialogType nonechọn lọc chỉ cho một ứng dụng cụ thể không?
SexyBeast

Đối với tôi hành vi này đã không thay đổi (sau khi nhập lệnh) cho đến khi đăng xuất và đăng nhập.
r_alex_hall

12

Bạn cũng có thể làm cho thông báo xuất hiện dưới dạng thông báo thay thế:

defaults write com.apple.CrashReporter UseUNC 1

2
Như cái này. Trên macOS Sierra, một biểu ngữ thông báo trượt qua ở phía trên bên phải màn hình và sẽ tự biến mất nhưng nếu bạn nhấp vào nó, bạn sẽ nhận được cửa sổ kết xuất sự cố đầy đủ ban đầu. Vì vậy, điều này là hoàn hảo. Ít gây khó chịu hơn nhưng để lại các tùy chọn mở.
rõ ràng

3

Hành vi mặc định khi nhận SIGQUIT là kết xuất lõi và thoát; phóng viên sự cố được kích hoạt như là một phần của quá trình này.

Bắt đầu với 10,5 (?) Chỉ cần đặt trình xử lý tín hiệu cho SIGQUIT là đủ để tránh trình báo cáo sự cố; bạn có thể sẽ muốn xử lý cũng gọi thoát.

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

Đoạn mã trên đã được thử nghiệm vào ngày 10.8.5 so với /usr/bin/python2.7.2.


1
Có cách nào để defaults write com.apple.CrashReporter DialogType nonechọn lọc chỉ cho một ứng dụng cụ thể không?
SexyBeast
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.