2010-06-29 1 views

답변

1

그건 프로그램을 종료하는 한 가지 방법입니다. 0이 아닌 숫자로 exit을 호출하면 프로그램에 "정상적으로 오류 상태가 종료되었습니다"라는 메시지가 표시됩니다. 다른 방법이 있습니다. 누군가 kill 프로세스가 비정상적으로 종료됩니다. 프로그램이 segfault (매핑되지 않은 주소에 액세스)하면 SIGSEGV로 종료됩니다.

이렇게하면 "프로그램을 종료시키는 원인"에 대한 답변을 얻을 수 있습니다. 이는 "어떤 프로세스가 착수되었는지"에 대해 대답하지 않습니다. 아마도 "프로그램이 충돌 할 때 커널이 무엇을합니까?"라는 의미 일 것입니다. 나는 모든 세부적인 내용을 알지 못한다. 그러나 프로그램이 불법적 인 일을 할 때 시스템의 다른 부분의 메모리가 손상된 경우가 아니라면 (커널에 버그가 없으면) 프로그램을 실행하지 못하도록하고 사용중인 자원을 시스템에 리턴합니다.

+0

귀하의 회신에 조이 감사합니다! 그건 내 질문에 많은 도움이되고 올바른 방향으로 나를 지적했다. 또 하나의 질문 - 프로세스가 사용자/OS 또는 SIGSEGV에 의해 종료되는 경우 exit()가 전혀 호출되지 않습니까? 감사. – Drizzy

+0

@ user354822 : 아니요, 호출되지 않았습니다. 'exit()'는 userland 프로그램에 의해 호출되는 시스템 호출이라는 것을 기억하십시오. 그 프로그램이 더 이상 존재하지 않으면 어떻게 exit()를 호출 할 수 있습니까? 또한'atexit()'매뉴얼 페이지는 "시그널 전달 때문에 프로세스가 비정상적으로 종료된다"(SIGSEGV (segmentation fault), SIGTERM (kill), SIGKILL (kill - 9) 등). –

관련 문제