리눅스 시그널 예제
2/08/2019이전 게시물: Linux의 리버스 엔지니어링 도구 – 문자열, nm, ltrace, strace, LD_PRELOAD 예제 : 아래 예제에서는 SIGINT(= 2) 신호가 차단되고 신호가 보류 중입니다. 신호(2,); 또는 신호(SIGINT,); 신호 함수에서 너무 적은 인수의 오차를 생성합니다. 신호의 유익한 특성 외에도 프로그램을 중단합니다. 즉, 프로그램의 스레드 중 하나인 신호를 처리하기 위해 실행을 중지하고 일시적으로 신호 처리기로 전환합니다. Linux 커널의 버전 2.6에서와 같이 대부분의 신호는 한 번 사용했던 것처럼 전체 응용 프로그램이 아닌 하나의 스레드만 중단합니다. 또한, 신호 처리기 자체는 다른 신호에 의해 중단 될 수있다. 신호 이름은 헤더 파일 signal.h를 포함하여 정의됩니다. 대부분의 리눅스 사용자는 키 조합 Ctr+C를 사용하여 Linux에서 프로세스를 종료합니다. 신호는 이름에서 알 수 있듯이 무언가를 신호하는 데 사용됩니다.
신호의 여러 종류가 있습니다, 각각은 자신의 무언가를 나타내는. 예를 들어, 내가 이미 언급 한 SIGINT, 누군가가 CTRL-C로 중단하려고 프로그램을 알려줍니다. 전제 조건 : 포크 시스템 호출 대기 시스템 신호는 사용자 프레스 ctrl-c 또는 다른 프로세스가이 프로세스에 뭔가를 말할 때 때문에 OS에 의해 프로세스로 전송되는 소프트웨어 생성 인터럽트입니다. 프로세스로 전송할 수 있는 수정 된 신호 집합이 있습니다. 신호는 정수로 식별됩니다. 신호 번호에는 기호 이름이 있습니다. 예를 들어 SIGCHLD는 자식이 종료될 때 부모 프로세스로 전송되는 신호의 수입니다. 예: 신호는 유용한 알람 시계 기능을 제공합니다. 경보 함수 호출은 프로세스에서 향후 언젠가 SIGALRM 신호를 예약하는 데 사용할 수 있습니다. 그들은 모두 같은 타이머를 공유하기 때문에 알람()와 수면()을 혼합하는 것은 나쁜 생각이다 : 하나에 대한 호출은 여러 가지 다른 사용법이 있습니다.
예를 들어 디버거는 디버깅되는 프로그램에 대한 이벤트를 수신하기 위해 신호에 의존합니다 (디버거 작동 방법 내 기사에서 자세히 보십시오).