sigquit에서“<application>가 예기치 않게 종료됩니다”메시지 방지


18

Ctrl\때때로 (보통 잘못 작동하는) 자신을 눌러 SIGQUIT로 파이썬 프로세스를 죽 입니다. "Python 예기치 않게 종료"메시지를 방지 할 수 있습니까? 나는 탈출을 할 수 있다는 것을 알고 있으므로 그렇게 나쁘지 않습니다.

"Python이 예기치 않게 종료되었습니다."  대화


1
대신 control-C를 사용하지 않는 이유는 무엇입니까? SIGTERM은 메시지를 발생시키지 않습니다.
ughoavgfhw

@ughoavgfhw 때로는 터미널을 원시 모드로 만드는 REPL 작업을하고 있으므로 프로그램은 대신 ctrl-c를 키 입력으로받습니다. 또한 때로는 스레드 문제가있어서 죽어야하는 스레드는 그렇지 않으며 Python에서는 ctrl-c가 주 스레드 만 죽이는 것처럼 보입니다. (저는 t.daemon = True이것들을 사용해야한다는 것을 알고 있으며 대부분의 경우입니다) 여러 가지 이유로 때로는 ctrl- \를 사용해야합니다.
토마스

그것은 당신의 코드 인 경우, 코드를 가진 개발 문제는 신호를 처리 할 수
user151019

@ Mark Agreed-특정 에지 케이스에서 작동하는 동작이 아직없는 동안 이것은 문제였습니다.
토마스

답변:


18

충돌 보고서 대화 상자를 보지 않으려면이를 사용하지 않는 환경 설정이 있습니다.

defaults write com.apple.CrashReporter DialogType none

로그 아웃했다가 다시 로그인하여 변경 사항을 적용하십시오.


2
제 경우에는 로그 아웃하지 않아도됩니다.
Cory Klein

6
defaults write com.apple.CrashReporter DialogType none하나의 특정 앱에 대해서만 선택적으로 수행 할 수있는 방법이 있습니까?
SexyBeast

나를 위해이 동작은 로그 아웃하고 로그인 할 때까지 명령을 입력 한 후에 변경되지 않았습니다.
r_alex_hall

12

대신 메시지를 알림으로 표시 할 수도 있습니다.

defaults write com.apple.CrashReporter UseUNC 1

2
이 같은. macOS Sierra의 경우 알림 배너가 화면 오른쪽 상단으로 슬라이드되어 저절로 사라지지만 클릭하면 원래 전체 크래시 덤프 창이 나타납니다. 그래서 이것은 완벽합니다. 눈에 잘 띄지 않지만 옵션은 열어 둡니다.
clearlight

3

SIGQUIT를 수신 할 때의 기본 동작은 코어 덤프 및 종료입니다. 충돌 리포터는이 프로세스의 일부로 트리거됩니다.

10.5 (?)로 시작하면 충돌 리포터를 피하기 위해 SIGQUIT에 대한 신호 핸들러를 설정하는 것만으로 충분합니다. 핸들러가 exit를 호출하기를 원할 것입니다.

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

위의 코드는 10.8.5에서 /usr/bin/python2.7.2 로 테스트되었습니다 .


1
defaults write com.apple.CrashReporter DialogType none하나의 특정 앱에 대해서만 선택적으로 수행 할 수있는 방법이 있습니까?
SexyBeast
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.