다음을 통해 공유


signal

집합 신호 처리를 중단합니다.

중요중요

종료 하려면이 메서드를 사용 하지는 Windows 스토어 응용 프로그램을 테스트 하거나 디버깅 시나리오에서 제외 하 고.닫기 방법 Programmatic 또는 UI는 Windows 스토어 의 3.6 단원에 따라 응용 프로그램을 사용할 수 없습니다는 Windows 8 응용 프로그램 인증 요구 사항.자세한 내용은 응용 프로그램 수명 주기 (Windows 저장소 프로그램).

void (__cdecl *signal(
   int sig, 
   void (__cdecl *func ) (int [, int ] ))) 
   (int);

매개 변수

  • sig
    신호 값입니다.

  • func
    실행할 함수입니다.첫 번째 매개 변수는 신호 값 이며 두 번째 매개 변수 SIGFPE 첫 번째 매개 변수는 경우에 사용할 수 있는 하위 코드입니다.

반환 값

signal이전 값을 반환 합니다. func 지정 된 신호를 연결 합니다.예를 들어, 경우 이전 값을 func 된 SIG_IGN, 또한 반환 값이 SIG_IGN.반환 값이 SIG_ERR 경우에 오류를 나타내는 errno 로 설정 된 EINVAL.

_sys_nerr, _doserrno, errno, _sys_errlist, , 및 기타 자세한 내용은 반환 코드.

설명

signal 함수가 프로세스는 운영 체제에서 인터럽트 신호를 처리 하는 여러 가지 방법 중 하나를 선택할 수 있습니다.sig 인수는 인터럽트입니다 signal 응답. 신호에 정의 된 매니페스트 상수 다음 중 하나 여야 합니다.H.

sig 값

설명

SIGABRT

비정상적으로 종료

SIGFPE

부동 소수점 오류

SIGILL

잘못 된 명령

SIGINT

CTRL + C 신호

SIGSEGV

잘못 된 저장소 액세스

SIGTERM

종료 요청

경우 sig 하나가 아닌 위의 값을 잘못 된 매개 변수 처리기에 정의 된 대로 호출 됩니다 매개 변수 유효성 검사 .실행을 계속 허용 되 면이 함수를 설정 errno 에 EINVAL 를 반환 하 고 SIG_ERR.

기본적으로 signal 호출에 해당 하는 프로그램의 종료 코드 3의 값에 관계 없이 종료 sig.

[!참고]

SIGINT모든 Win32 응용 프로그램에 대해 지원 되지 않습니다.Win32 운영 체제 CTRL + C 인터럽트를 발생 하는 경우 특히 해당 인터럽트를 처리 하기 위한 새 스레드를 생성 합니다.이 예기치 않은 동작이 멀티스레드 될 단일 스레드 응용 프로그램에서 UNIX와 같은 발생할 수 있습니다.

func 인수에 주소를 작성 하 여, 신호 처리기 또는 미리 정의 된 상수 중 하나입니다 SIG_DFL 또는 SIG_IGN, 신호에도 정의 합니다.H.경우 func 함수는 지정 된 신호를 신호 처리기로 설치 된.신호 처리기 프로토타입 하나의 형식 인수가 필요 sig, 형식의 int.실제 인수를 통해 운영 체제를 제공 sig 인터럽트를 발생 하는 경우. 인수는 인터럽트를 생성 하는 신호입니다.따라서 (앞의 표에 나열 된) 여섯 개의 매니페스트 상수 신호 처리기 안에 사용 하면 확인할 어떤 인터럽트 발생 하 여 적절 한 조치를 취할 수 있습니다.예를 들어, 호출할 수 있습니다 signal 두 번 동일한 처리기를 두 개의 서로 다른 신호를 할당 하려면 다음 테스트는 sig 내 다른 작업을 수행 하는 처리기에서 받은 신호를 기반으로 합니다.

부동 소수점 예외를 테스트 하는 경우 (SIGFPE), func 지점에는 두 번째 선택적 인수를 취하는 함수는 FLOAT를 정의 하는 여러 매니페스트 상수 중 하나입니다.H 폼의 FPE_xxx.경우는 SIGFPE 신호가 발생 하면 부동 소수점 예외의 형식을 확인 한 다음 적절 한 조치를 취할 수 있는 두 번째 인수의 값을 테스트할 수 있습니다.이 인수 및 가능한 값은 Microsoft 확장입니다.

부동 소수점 예외, 변수의 값에 대 한 func 신호를 수신 하는 즉시 다시 설정 되지 않습니다.부동 소수점 예외 로부터 복구 하려면 try/절을 제외 하 고 작업을 가리킨 주변 부동.또한 사용 하 여 복구할 수 있습니다 setjmplongjmp.두 경우 모두 정의 되지 않음은 부동 소수점 왼쪽 프로세스 상태에 실행 호출 하는 프로세스를 다시 시작 합니다.

신호 처리기를 반환 하면 호출 하는 프로세스 실행 시점에서 인터럽트 신호를 받은 직후 다시 시작 합니다.신호 또는 운영 모드의 종류에 관계 없이 마찬가지입니다.

지정 된 함수를 실행 하기 전에 값을 func 로 설정 된 SIG_DFL.다음 인터럽트 신호에 대 한 설명 된 대로 처리 됩니다 SIG_DFL에 대 한 호출에 개입 하지 않는 한 signal 에서 지정 합니다.이 기능은 신호에서 호출된 되는 함수를 다시 수 있습니다.

인터럽트가 발생 하면 신호 처리기 루틴은 일반적으로 비동기적으로 호출 되기 때문에 신호 처리기 함수를 런타임 작업 불완전 하며 알려지지 않은 상태에 있을 때 컨트롤을 발생할 수 있습니다.아래 목록은 신호 처리기 루틴에서 사용할 수 있는 기능을 결정 하는 제한에 요약 되어 있습니다.

  • STDIO 나 낮은 수준의 문제가 없습니다 수행 합니다.H I/O 루틴 (예: printf 및 fread).

  • 힙 루틴 또는 힙 루틴을 사용 하는 루틴을 호출 하지 마십시오 (예: malloc, _strdup, 및 _putenv).볼 malloc 에 대 한 자세한 내용은.

  • 시스템 호출을 생성 하는 함수를 사용 하지 마십시오 (예: _getcwd, time).

  • 사용 하지 않는 longjmp 인터럽트에서 부동 소수점 예외가 발생 하지 않으면 (즉, sig 는 SIGFPE).이런 경우 부동 소수점 패키지를 호출 하 여 먼저 초기화 _fpreset.

  • 모든 오버레이 루틴을 사용 하지 않습니다.

트랩 이면 프로그램에서 부동 소수점 코드를 포함 해야의 SIGFPE 함수에 예외입니다.부동 소수점 코드가 없는 프로그램 런타임 라이브러리의 신호 처리 코드를 필요한 경우 단순히 휘발성 double을 선언 하 고 0으로 초기화.

volatile double d = 0.0f; 

SIGILL 및 SIGTERM 신호는 Windows에서 생성 되지 않습니다.ANSI 호환성을 위해 포함 됩니다.따라서 이러한 신호를 위한 신호 처리기를 설정할 수 있습니다 signal를 호출 하 여 이러한 신호를 명시적으로 생성할 수 있습니다 발생.

생성 된 프로세스를 호출 하 여 만들어진 신호 설정이 유지 되지 않습니다 _exec 또는 _spawn 함수입니다.신호 설정은 기본값으로 새 프로세스에 다시 설정 됩니다.

요구 사항

루틴

필수 헤더

signal

<signal.h>

추가 호환성 정보를 참조 하십시오. 호환성 소개에서 합니다.

예제

다음 예제에서는 signal 몇 가지 사용자 지정 동작을 추가 하 여 SIGABRT 신호.중단 동작에 대 한 자세한 내용은 참조 하십시오 _set_abort_behavior.

// crt_signal.c
// compile with: /c
// Use signal to attach a signal handler to the abort routine
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <tchar.h>

void SignalHandler(int signal)
{
    printf("Application aborting...\n");
}

int main()
{
    typedef void (*SignalHandlerPointer)(int);

    SignalHandlerPointer previousHandler;
    previousHandler = signal(SIGABRT, SignalHandler);
    
    abort();
}
  
  
  

해당 .NET Framework 항목

해당 사항 없음. 표준 C 함수를 호출 하려면 PInvoke. 자세한 내용은 플랫폼 호출 예제.

참고 항목

참조

프로세스 및 환경 제어

abort

_exec에 _wexec 함수

exit, _exit

_fpreset

_spawn, _wspawn 함수