이끌든지 따르든지 비키든지

Software Development/Server

[Linux] 프로세스에게 시그널 보내기

SeongHo5 2024. 5. 16. 18:31

들어가기 앞서 - 시그널(Signal)이란?


시그널은 운영 체제가 프로세스 간 통신을 위해 사용하는 중요한 메커니즘 중 하나입니다. 

시그널은 프로세스에게 특정 이벤트가 발생했음을 알리고, 프로세스가 그에 맞게 행동하도록 합니다.

 

 

 

 

SIGNAL의 특징


  • 비신뢰성

리눅스 시그널은 비신뢰성을 가지고 있습니다. 이는 시그널이 도착하는 순서가 보장되지 않으며, 시그널이 손실될 수 있다는 것을 의미합니다. 여러 시그널이 동시에 발생하면 일부 시그널은 무시될 수 있습니다.

 

 

  • 대기하지 않음

시그널은 비동기적으로 처리됩니다. 이는 시그널이 발생하면 즉시 프로세스에 전달되며, 프로세스는 시그널을 기다리지 않고 자신의 작업을 계속 수행할 수 있습니다. 시그널이 도착했을 때만 프로세스는 이를 처리합니다.

 

 

대표적인 SIGNAL 


  • SIGKILL

SIGKILL은 가장 강력한 시그널로, 프로세스를 즉시 종료시킵니다.

이 시그널은 무시하거나 처리할 수 없으며, 프로세스는 강제로 종료됩니다.

 

  • SIGTERM

SIGTERM은 프로세스를 정상적으로 종료시키기 위한 시그널입니다. 프로세스는 이 시그널을 수신하면 종료 작업을 수행하고, 파일을 닫거나 중요한 데이터를 저장하는 등의 정리 작업을 할 수 있는 시간을 가집니다. SIGTERM은 일반적으로 프로세스를 우아하게 종료(graceful shutdown) 시키는 방법으로 사용됩니다.

 

  • SIGINT

SIGINT는 사용자가 터미널에서 인터럽트 시그널을 보낼 때 발생합니다. 주로 Ctrl + C 키 조합을 사용하여 실행 중인 프로세스를 중단시키는데 사용됩니다. SIGINT는 기본적으로 프로세스에 의해 처리되지 않으면 프로세스를 종료합니다.