Linux 신호 처리 1
5741 단어 linux
NAME
signal - ANSI C signal handling
SYNOPSIS
#include <signal.h>
typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);
signal 함 수 는 등록 기능 이 있어 서 아무 일 도 하지 않 습 니 다.시스템 에 신호 signum 이 올 때 handler 방식 으로 처리 하 라 고 만 알려 줍 니 다.신호 가 올 때 만 이 함 수 를 호출 할 수 있 습 니 다.신호 가 오지 않 으 면 영원히 이 함 수 를 호출 하지 않 을 것 이다.
사용 자 는 CTRL + c, Ctrl + \ 를 입력 하거나 터미널 드라이버 가 신호 제어 문자 에 할당 하 는 다른 모든 키 를 통 해 커 널 에 신 호 를 요청 할 수 있 습 니 다.
ctrl + c --> 2)SIGINT ctrl + \ --> 3)SIGQUIT
이상 둘 다 프로그램 을 종료 시 킬 수 있 습 니 다.
코드
/*************************************************************************
> File Name: hello.c
> Author: KrisChou
> Mail:[email protected]
> Created Time: Mon 25 Aug 2014 09:25:15 AM CST
************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>
#include <assert.h>
#include <signal.h>
#include <sys/select.h>
void handler(int num)
{
printf("sig_num: %d
", num);
}
int main(int argc, char* argv[])
{
char buf[1024];
signal(2, handler);
int iret ;
fd_set read_set, ready_set ;
FD_ZERO(&read_set);
FD_SET(0, &read_set);
while(1)
{
ready_set = read_set ;
iret = select(1, &ready_set, NULL, NULL, NULL);
if(iret == 0)
{
continue ;
}else if(iret == -1)
{
perror("select");
continue ;
}else
{
iret = read(0, buf, 1024);
buf[iret] = '\0';
write(1, buf, strlen(buf));
}
}
프로그램 이 실 행 된 후 먼저 ctrl + c 를 누 르 면 결 과 는 다음 과 같 습 니 다.
[purple@localhost review]$ gcc test.c
[purple@localhost review]$ ./a.out
^Csig_num: 2
select: Interrupted system call
hello world!
hello world!
SIGINT 가 signal (2, handler) 을 통 과 했 기 때 문 입 니 다.등록 을 했 기 때문에 ctrl + c 를 누 르 면 신호 처리 함수 handler 가 자 연 스 럽 게 이 신 호 를 포착 할 수 있 음 이 분명 합 니 다 ^ Csignum: 2 。
select 함 수 는 인 터 럽 트 신 호 를 처리 합 니 다.인 터 럽 트 신 호 를 받 으 면 - 1 로 돌아 갑 니 다.따라서 select: Interrupted system call select 를 표시 합 니 다.
메모: select 함 수 는 3 중 상황 에서 돌아 갑 니 다. 각각: 폴 링 시간 이 되면 돌아 갑 니 다.신 호 를 받 으 면 돌아 올 겁 니 다.설명 자 는 이벤트 가 있 으 면 돌아 갑 니 다.
(추가: read 는 차단 함수 입 니 다. 신 호 를 받 을 때 신 호 를 먼저 처리 하고 계속 기다 리 세 요.)
그 후에 프로그램 이 실 행 된 것 이 분명 하 다.입력 이 있 으 면 select 가 1 을 되 돌려 주 고 입력 한 것 을 인쇄 합 니 다.ctrl + d 를 누 르 면 select 를 0 으로 되 돌려 주 고 프로그램 을 계속 실행 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
용감한 바로 가기 및 우분투 응용 프로그램안녕하세요 여러분, 이 기사에서는 모든 사이트에서 pwa를 생성하고 실행기 응용 프로그램으로 추가하는 방법을 설명하고 싶습니다. 일부 웹사이트는 PWA로 설치를 허용하지 않지만 유사한 애플리케이션을 원합니다. 1. ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.