본문 바로가기

클라우드(Cloud)

[스나이퍼팩토리] 카카오클라우드 AIaaS 마스터 클래스 4주차 - 리눅스(Linux) 시그널_Signal

 지난번에 이어 리눅스(Linux)의 시그널에 대해 알아볼 것이다.

 

 시그널(signal) 은 리눅스나 유닉스 같은 운영체제에서 프로세스에 비동기적으로 이벤트를 알리기 위해 사용하는 일종의 알람 메커니즘이다. 프로그램이 평소 동작하다가도 외부에서 멈추라는 등의 요청을 받을 수 있어야 하는데, 이때 사용하는 게 바로 시그널이다. 

 

 시그널이 무엇이고, 어떤 명령어들을 사용해 동작하는지 아래 설명을 통해 알아보자. 

 

✅ 1. 리눅스 표준 입출력 (Standard I/O)

종류 설명 파일 번호
stdin 사용자 입력 (키보드 등) 0
stdout 일반 출력 (모니터 등) 1
stderr 오류 메시지 출력 2

비유로 이해:

  • stdin: 손님이 주방에 주문 넣는 창구
  • stdout: 주방에서 손님에게 음식 전달
  • stderr: 주방에 문제 생기면 울리는 경고벨

✅ 2. 리디렉션 (Redirection)

기호 의미
> 표준출력 덮어쓰기
>> 표준출력 이어쓰기
< 표준입력으로 파일에서 읽기
2> 표준에러를 파일로 저장
2>&1 표준에러를 표준출력으로 병합
&> stdout + stderr 동시 저장 (일부 쉘에서만 작동)
/dev/null 출력을 버림 (black hole)

예시:

ls -l > list.txt # 출력 결과를 list.txt에 저장 

ls x > out.txt 2> err.txt # 표준출력은 out.txt, 에러는 err.txt 

command > /dev/null # 출력은 무시

✅ 3. tee 명령어 (분기 처리)

  • 기능: 출력을 화면에 보여주면서 동시에 파일에도 저장
  • 형식: command | tee file.txt
  • -a 옵션: 이어쓰기 모드 (append)

예시:

ls -al | tee result.txt 
echo "log" | tee -a log.txt 
command 2>&1 | tee both.log

✅ 4. 리눅스 종료 코드 (Exit Code)

종료 코드 의미
0 성공
1 이상 실패 또는 오류 코드 (사용자 정의 가능)

확인 명령어:

echo $?

 

연결 연산자:

연산자 의미
&& 앞 명령 성공 시 뒤 명령 실행
|| 앞 명령 실패 시 뒤 명령 실행
; 앞 명령과 무관하게 실행
& 백그라운드 실행 (비동기)

예시:

make && echo "성공" || echo "실패"

✅ 5. 종료 코드 매크로

C언어에서는 다음과 같이 상수 대신 의미 있는 이름을 사용:

매크로  의미
EXIT_SUCCESS 0 성공 종료
EXIT_FAILURE 1 실패 종료
#define ERR_CONFIG_MISSING 2 2 사용자 정의 오류

예시:

exit(EXIT_FAILURE); // 실패 종료 
exit(ERR_CONFIG_MISSING); // 정의된 코드로 종료

자식 프로세스의 종료 상태는 WEXITSTATUS(status)로 해석 가능.


✅ 6. 리눅스 시그널 (Signal)

📌 개념

  • 커널이 비동기 이벤트를 프로세스에 전달하는 방식
  • 사용자의 키 입력, 예외, 타이머 등으로 발생

📌 주요 시그널

키보드 시그널 설명
Ctrl+C SIGINT 인터럽트 (프로세스 종료 요청)
Ctrl+Z SIGTSTP 중지 (일시 정지)
Ctrl+\ SIGQUIT 종료 및 코어덤프
Ctrl+D EOF 입력 종료 표시
kill -SIGTERM <PID> SIGTERM 정상 종료 요청
kill -9 <PID> SIGKILL 강제 종료

📌 시그널 처리 방법

🔹 쉘 스크립트

trap 'echo 종료 중…; exit' SIGINT 
trap '' SIGTERM # 무시

🔹 C 언어

signal(SIGINT, SIG_IGN); // SIGINT 무시

✅ 실무 적용 요약

항목 활용 예시
표준 입출력 로그, 오류 처리, 사용자 입력 처리
리디렉션 결과 파일 저장, 로그 분리, 무시 처리
tee 로그 저장과 화면 출력 동시 처리
종료 코드 스크립트 흐름 제어 (성공/실패 판단)
명령 연결 성공 조건 분기, 백그라운드 작업
매크로 유지보수 쉬운 종료 코드 관리
시그널 데몬 종료 처리, 사용자 인터럽트 대응

본 후기는 [카카오엔터프라이즈x스나이퍼팩토리] 카카오클라우드로 배우는 AIaaS 마스터 클래스 (B-log) 리뷰로 작성 되었습니다.