현재 사용자가 애플리케이션 종료에 대해 불평하는 데 문제가 있습니다. 일부 (임의로 보이는) 조건 및 데스크톱 환경에서 앱이 종료되지 않고 재부팅시 설정이 저장되지 않습니다. 나는 관련 irc 채널에서 요청했고 대부분의 경우 신호를 올바르게 처리하라는 지시를 받았습니다. 터미널의 Ctrl-C에 대한 SIGINT와 "정상"종료에 대한 SIGTERM을 알고 있습니다. 하지만 SIGHUP도 중요하다고 들었습니다. 그래서 제 질문은 :
잘 작동하는 애플리케이션을 구축하려면 어떤 신호를 처리해야합니까?
https://en.wikipedia.org/wiki/Unix_signal
표준 신호 목록과 기본 동작이 있습니다. 충분한 권한이있는 프로세스는 항상 신호를 보낼 수 있지만 프로세스 (또는 프로세스를 통해)는이를 수행해서는 안됩니다.
대상이 전송하려는 특수 신호를 처리한다는 것을 알지 못하는 경우 에만 kill
프로세스 kill
가 TERM 및 환경 (쉘, 터미널 드라이버)에서 생성 할 수있는 신호 묶음으로 처리 될 것으로 예상해야합니다 .
동작별로 기본 신호를 정렬 할 수 있습니다.
코어 덤핑 신호
ABRT TRAP SYS BUS FPE ILL SEGV XFSZ XCPU QUIT
일부 특수 기능을 사용하여 사용자 (TRAP, ABRT, SYS)에 의해 생성되거나 하드 오류 상태 (BUS, FPE, ILL, SEGV)가 생성됩니다. QUIT
코어 덤프 ( C+\
)를 원하는 터미널에서 사용자가 생성합니다 .
이들을 기본 처리로 유지할 수 있습니다.
아웃의 종료 신호 :
HUP INT PIPE TERM ALRM POLL PROF USR1 USR2
너는 기대해야한다
HUP INT PIPE TERM
다양한 상황에서 환경에서 :
HUP -- when the terminal hungs up or you become a stopped orphaned process
INT -- when the user at the terminal interrupts you with C-c
PIPE -- when a PIPE or socket you write into closes, e.g. by
exiting before you finished writing to it
(`yourprogram | (exit)` will give you a `PIPE`
if yourprogram attempts to write to its STDOUT)
TERM -- when a process ends you a normal termination request
직접 설정 한 경우에만 나머지 종료 신호를 수신해야합니다.
KILL and STOP 당신은 아무것도 할 수 없습니다.
터미널에서 생성 된 정지 신호 를 가로 챌 수 있습니다 .
TTIN -- you read from the terminal and you're a backgrounded process
TTOU -- you write the terminal when you're a backgrounded process
and the terminal is set to put you to sleep when you do
TSTP -- you're being put to sleep with `C-Z`
그러나 최악의 경우 상태를 손상시키지 않고 프로세스를 중지합니다.
당신이 처리 할 필요가 알지 못한다면 CHLD
, CONT
또는 URG
, 당신은하지 않습니다.
TL; DR :
기본적으로 HUP, INT, PIPE 및 TERM은 일반적으로 사전 종료 정리를 수행하려는 경우 처리 (또는 무시)해야한다고 생각합니다. 프로그램이 해당 신호를 사용하지 않거나 모든 상황에서 일부 정리가 절대적으로 필요하지 않는 한 나머지는 그대로 둘 수 있습니다.
후자의 경우 처리되지 않은 모든 신호를 공백으로 차단할 수 있지만 신호 차단 마스크는 포크를 통해 상속되고 호출을 실행하고 ILL과 같은 신호를 무시하거나 차단합니다. kill 또는 sigqueue로 정의되지 않은 동작을 제공합니다.
더 자세히 알아 보려면 맨 페이지와 표준을 살펴보십시오. 시그널은 유닉스에서 상당히 큰 주제이며 그것들을 다루는 것은 매우 까다로울 수 있습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다