Linux에서 Ctrl + C 인터럽트 이벤트 처리
저는 C++를 사용하고 리눅스 GNU C 컴파일러를 사용하여 컴파일하는 어플리케이션을 개발하고 있습니다.
사용자가 +키를 사용하여 스크립트를 인터럽트하는 기능을 실행하고 싶습니다.
어떻게 해야 하나?어떤 답변이든 감사히 받겠습니다.
를 누르면 운영 체제가 프로세스로 신호를 보냅니다.여러 가지 신호가 있는데 그 중 하나가 SIGINT입니다.SIGINT("프로그램 인터럽트")는 터미네이션 신호 중 하나입니다.
Termination Signal에는 몇 가지 종류가 더 있지만 SIGINT의 흥미로운 점은 프로그램에서 처리(잡힐)할 수 있다는 것입니다.SIGINT의 기본 동작은 프로그램 종료입니다.즉, 프로그램에서 이 신호를 특별히 처리하지 않는 경우 프로그램을 누르면 기본 작업으로 종료됩니다.
신호의 기본 동작을 변경하려면 잡을 신호를 등록해야 합니다.(적어도 POSIX 시스템에서는) C 프로그램에 신호를 등록하려면 두 가지 기능이 있습니다.
이 함수들은 헤더 signal.h를 당신의 C 코드에 포함시켜야 합니다.저는 간단한 예를 제시했습니다.signal
아래의 기능과 코멘트를 함께 제공합니다.
#include <stdio.h>
#include <stdlib.h>
#include <signal.h> // our new library
volatile sig_atomic_t flag = 0;
void my_function(int sig){ // can be called asynchronously
flag = 1; // set flag
}
int main(){
// Register signals
signal(SIGINT, my_function);
// ^ ^
// Which-Signal |-- which user defined function registered
while(1)
if(flag){ // my action when signal set it 1
printf("\n Signal caught!\n");
printf("\n default action it not termination!\n");
flag = 0;
}
return 0;
}
참고: 신호 처리기에서는 안전/인증 기능만 호출해야 합니다.예를 들어 printfin signal handler를 호출하지 마십시오.
이 코드를 gcc로 컴파일하여 셸에서 실행할 수 있습니다.코드에 무한 루프가 있고 당신이 a를 보낼 때까지 실행될 것입니다.SIGINT
누름으로써 신호를 보내다
일반적으로 입력하면 셸이 전송됩니다.SIGINT
당신의 프로그램에.해당 신호(또는 를 통해)에 대한 핸들러를 추가하면, 눌러진 상태에서 원하는 작업을 수행할 수 있습니다.
또는 프로그램이 종료되기 전에 정리 작업에만 관심이 있는 경우 를 통해 종료 처리기를 설정하는 것이 더 적합할 수 있습니다.
신호 매크로를 사용할 수 있습니다.
다음은 이 문제를 해결하는 방법의 예입니다.
#include <signal.h>
#include <stdio.h>
void sigint(int a)
{
printf("^C caught\n");
}
int main()
{
signal(SIGINT, sigint);
for (;;) {}
}
샘플 출력:
Ethans-MacBook-Pro:~ phyrrus9$ ./a.out
^C^C caught
^C^C caught
^C^C caught
^C^C caught
^C^C caught
언급URL : https://stackoverflow.com/questions/17766550/ctrl-c-interrupt-event-handling-in-linux
'source' 카테고리의 다른 글
스프링 키클로크:사용자 ID 가져오기 (0) | 2023.10.09 |
---|---|
기존 표에서 각 단어의 첫 글자를 대문자로 바꿉니다. (0) | 2023.10.09 |
제출후 각도 - 클리어 폼 입력 (0) | 2023.10.09 |
우분투에서 mysql 서버를 시작할 수 없습니다. (0) | 2023.10.09 |
우커머스 템플릿이 작동하지 않음을 재정의함 (0) | 2023.10.04 |