[리눅스] 리눅스 프로세스 신호 관리
프로세스 신호란 무엇인가요?
신호는 운영 체제가 프로세스에게 어떤 이벤트가 발생했음을 통보하거나 특정 동작을 요청하는 메커니즘입니다. 예를 들어, 프로세스가 종료되거나 사용자 입력을 받을 때 운영 체제가 해당 프로세스에게 신호를 보낼 수 있습니다.
리눅스는 다양한 종류의 신호를 지원합니다. 가장 일반적인 신호는 SIGTERM, SIGKILL, SIGINT 등이 있습니다. 이러한 신호는 프로세스 종료, 중지 또는 일시 중단과 같은 동작을 수행하도록 지시합니다.
프로세스 신호 보내기
#include <stdio.h>
#include <signal.h>
int main() {
pid_t pid = <프로세스 ID>; // 대상 프로세스 ID
int sig = <신호 번호>; // 보낼 신호 번호
int result = kill(pid, sig); // 신호 보내기
if (result == 0) {
printf("신호를 성공적으로 보냈습니다.\n");
} else {
printf("신호 보내기 실패했습니다.\n");
}
return 0;
}
위의 C 코드는 kill
함수를 사용하여 신호를 보내는 예제입니다. pid
는 대상 프로세스의 ID이고, sig
는 보낼 신호의 번호입니다.
프로세스 신호 처리
프로세스는 신호를 받았을 때 해당 신호를 처리할 수 있는데, 이를 위해 신호 처리기 함수를 등록해야 합니다.
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
void signal_handler(int sig) {
printf("신호 %d를 받았습니다.\n", sig);
// 여기서 신호 처리에 대한 작업을 수행합니다.
}
int main() {
signal(SIGINT, signal_handler); // SIGINT 신호에 대한 처리기 등록
while (1) {
// 여기서 작업을 수행합니다.
sleep(1);
}
return 0;
}
위의 예제는 signal
함수를 사용하여 SIGINT 신호에 대한 처리기를 등록하는 예제입니다. signal_handler
함수는 SIGINT 신호를 받았을 때 호출됩니다.
프로세스 신호 관리는 리눅스 시스템 프로그래밍에서 중요한 부분이며, 프로세스 간 상호작용 및 동기화에 필수적입니다. 올바른 신호 관리를 통해 안정적이고 효율적인 시스템을 구축할 수 있습니다.
이상으로 리눅스에서의 프로세스 신호 관리에 대해 알아본 내용을 마치도록 하겠습니다. 추가적인 자세한 내용은 리눅스 시스템 프로그래밍 관련 문서를 참고하시기 바랍니다.