문제

나는 과부의 6 개의 신호들은 이 사이트 http://www.cplusplus.com/reference/clibrary/csignal/signal.html

그때 나는 내 응용 프로그램(더블 클릭합하지 않을 통해 실행 IDE)과도 1)작업 종료 2)X 에 topright3)을 죽이는 과정이다.내가 예상되는 첫 번째 두 가지 원인이 어떤 종류의 신호(i 에 XP)하지만 슬프게도 저는 아무것도 건지지 못했습니다.나는 허용되지 않는 파일을 열을 쓸 때로는 신호가 발생?i am guessing i am(SIGSEGV 용).

때 firefox 충돌하거나 때문에 그것은,그것을 기억하는 어떤 페이지를 전했다.그것은 로그의 주소는 때에는 아무 페이지나 그것은 그렇게 신호 충돌?

나의 주요 문제는 어떤 신호를 사용할 수 있습니를 잡아 죽여 프로세스

도움이 되었습니까?

해결책

Win32는 프로그램을 가로 채는 옵션을 제공하지 않습니다. TerminateProcess (이는 작업 관리자의 "작업 종료"또는 [x]를 클릭 할 때 발생하는 일).

C 런타임 라이브러리가 Windows에서 실행될 때이 신호의 에뮬레이션을 제공하기 때문에 SIGSEGV 신호를 잡을 수 있습니다. 프로그램에서 Windows 액세스 위반 (예외 0xc0000005)이 발생하면 런타임 라이브러리에는이를 포착하고 UNIX 스타일 SIGSEGV를 시뮬레이션 할 수있는 옵션이 있습니다. 그러나 이것은 그러한 예외를 처리하는 가장 좋은 방법은 아닙니다. Win32 프로그램을 작성하는 경우 일반적으로 Unix 스타일 서비스를 사용해 보지 않아야합니다.

다른 팁

기본 예외 핸들러 호출 SetUnhandledExceptionFilter를 재정의하면 액세스 위반과 같은 런타임 오류를 포착 할 수 있습니다 (이것은 Win32 기능이므로 C 라이브러리 에뮬레이션에 의존하지 않음). 이것은 프로그램이 충돌 할 때 "미니 덤프"를 제공하는 데 사용할 수있는 방법입니다.

그러나이 예외 처리기는 일반적으로 응용 프로그램을 닫을 때 또는 응용 프로그램이 작업 관리자에서 닫을 때 호출되지 않습니다. 마지막 경우 Windows는 TerminateProcess를 호출하고 있습니다. 깨끗한 종료는 아니지만 프로그램이 종료되도록 강요하고 있습니다.

나는 Firefox에서 사용하는 구현이라는 것을 알지 못하지만 현재 탭을 열면 타이머가 실행될 가능성이 높으며 매번 실행할 때마다 히스토리를 파일과 더러운 마크에 저장합니다.

프로그램이 닫힐 때 (바이러스 백신 및 유사한 프로그램에 의해 구현) 두 개의 관련이없는 프로그램이 실행되는지 확인하는 것이 더 복잡한 솔루션은 각각 다른 하나가 여전히 실행 중인지 확인하고, 한 사람이 다른 사람을 감지하면 다시 실행되는지 확인하는 것입니다.

Windows 응용 프로그램 중 하나를 콘솔 어플리케이션 또는 GUI 다.콘솔 앱을 얻을하는 경향이 WM_CLOSE,콘솔 앱 CTRL_CLOSE_EVENT.어느 쪽도 아니는 신호;지 않게 전송되는 경우 응용 종료를 통해 TerminateProcess().

을 저장하려는 경우에는 당신이 사용하여 메모리에 매핑된 파일을 업데이트는 모든 작업입니다.면 프로세스가 종료되는,더러 페이지가 메모리에서 다시 기록하여 파일 OS,아마도 다른 순간에 너무입니다.이 솔루션 OS 을 관리하는 디스크 I/O 당신을 위해,그것은 더 나은 위치에 있다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top