[Linux] kill 명령어

Ogu·2022년 4월 20일
0
post-thumbnail

🌵 kill


프로세스에 특정한 signal을 보내는 명령어이다.
일반적으로 종료되지 않는 프로세스를 종료시킬 때 많이 사용한다.

1. 시그널을 지정하지 않을 경우 기본 값인 정상 종료(15, SIGTERM) 시그널을 보냅니다.
$ kill [pid]

2. 시그널 지정
$ kill -s [signal id] [pid]
$ kill -s [signal text] [pid]
$ kill -[signal id] [pid]
$ kill -[signal text] [pid]
  • s 옵션으로 시그널을 지정하지 않으면 기본 시그널 값이 정상종료된다. (SIGTERM,15)

  • 프로세스를 안전하게 종료하기 위해서는 "kill -9 pid", "kill -SIGKILL pid" 형태로 프로세스 강제 종료를 권장하지 않는다. (데이터 유실 위험)

  • 일반적으로 해당 Process에 문제가 있어서 다시 시작하고자 할 때에는 SIGHUP, SIGTERM, SIGKILL의 순서로 시도해본다.

  • kill 명령어는 내부적으로 kill()이란 시스템 콜을 사용하여 구현하고, 프로세스 식별자(PID)로 지시한 프로세스와 프로세스 그룹 식별자(PGID)로 지시한 프로세스 그룹에 시그널을 보낸다.

🌵 시그널

  • 특정 이벤트가 발생했을 때 프로세스에게 전달하는 신호(메시지)이다.

  • 리눅스에서 프로세스끼리 통신할 때 사용한다.

  • 시그널 이벤트로는 HW 예외(나누기 0), SW 상태, 사용자 입력, 시스템 콜(kill) 등이 있다.

옵션내용
Ctrl+c실행중인 프로세스에 SIGINT신호를 보낸다.(프로세스 종료)
Ctrl+z실행중인 프로세스에 SIGITSTP신호를 보낸다.(프로세스 정지)
Ctrl+\ 실행중인 프로세스에 SIGINT신호를 보낸다.(프로세스 종료 + 코어 덤프)

📌 시그널 종류

kill -l 명령어를 이용해 사용할 수 있는 시그널을 확인할 수 있다.
시그널은 여러 종류가 있고 각각 번호가 붙어있다.

$ kill -l
 1) SIGHUP	 2) SIGINT	 3) SIGQUIT	 4) SIGILL	 5) SIGTRAP
 6) SIGABRT	 7) SIGBUS	 8) SIGFPE	 9) SIGKILL	10) SIGUSR1
11) SIGSEGV	12) SIGUSR2	13) SIGPIPE	14) SIGALRM	15) SIGTERM
16) SIGSTKFLT	17) SIGCHLD	18) SIGCONT	19) SIGSTOP	20) SIGTSTP
21) SIGTTIN	22) SIGTTOU	23) SIGURG	24) SIGXCPU	25) SIGXFSZ
26) SIGVTALRM	27) SIGPROF	28) SIGWINCH	29) SIGIO	30) SIGPWR
31) SIGSYS	34) SIGRTMIN	35) SIGRTMIN+1	36) SIGRTMIN+2	37) SIGRTMIN+3
38) SIGRTMIN+4	39) SIGRTMIN+5	40) SIGRTMIN+6	41) SIGRTMIN+7	42) SIGRTMIN+8
43) SIGRTMIN+9	44) SIGRTMIN+10	45) SIGRTMIN+11	46) SIGRTMIN+12	47) SIGRTMIN+13
48) SIGRTMIN+14	49) SIGRTMIN+15	50) SIGRTMAX-14	51) SIGRTMAX-13	52) SIGRTMAX-12
53) SIGRTMAX-11	54) SIGRTMAX-10	55) SIGRTMAX-9	56) SIGRTMAX-8	57) SIGRTMAX-7
58) SIGRTMAX-6	59) SIGRTMAX-5	60) SIGRTMAX-4	61) SIGRTMAX-3	62) SIGRTMAX-2
63) SIGRTMAX-1	64) SIGRTMAX

💊 자주 사용하는 시그널

  • 1(SIGHUP), 2(SIGINT), 3(SIGQUIT), 9(SIGKILL), 15(SIGTERM), 18(SIGTSTP), 19(SIGCONT), 20(SIGCHLD)
No    Name         Default Action       Description
1     SIGHUP       terminate process    terminal line hangup
2     SIGINT       terminate process    interrupt program
3     SIGQUIT      create core image    quit program
4     SIGILL       create core image    illegal instruction
5     SIGTRAP      create core image    trace trap
6     SIGABRT      create core image    abort program (formerly SIGIOT)
7     SIGEMT       create core image    emulate instruction executed
8     SIGFPE       create core image    floating-point exception
9     SIGKILL      terminate process    kill program
10    SIGBUS       create core image    bus error
11    SIGSEGV      create core image    segmentation violation
12    SIGSYS       create core image    non-existent system call invoked
13    SIGPIPE      terminate process    write on a pipe with no reader
14    SIGALRM      terminate process    real-time timer expired
15    SIGTERM      terminate process    software termination signal
16    SIGURG       discard signal       urgent condition present on socket
17    SIGSTOP      stop process         stop (cannot be caught or ignored)
18    SIGTSTP      stop process         stop signal generated from keyboard
19    SIGCONT      discard signal       continue after stop
20    SIGCHLD      discard signal       child status has changed
21    SIGTTIN      stop process         background read attempted from control terminal
22    SIGTTOU      stop process         background write attempted to control terminal
23    SIGIO        discard signal       I/O is possible on a descriptor (see fcntl(2))
24    SIGXCPU      terminate process    cpu time limit exceeded (see setrlimit(2))
25    SIGXFSZ      terminate process    file size limit exceeded (see setrlimit(2))
26    SIGVTALRM    terminate process    virtual time alarm (see setitimer(2))
27    SIGPROF      terminate process    profiling timer alarm (see setitimer(2))
28    SIGWINCH     discard signal       Window size change
29    SIGINFO      discard signal       status request from keyboard
30    SIGUSR1      terminate process    User defined signal 1
31    SIGUSR2      terminate process    User defined signal 2

📌 SIGKILL(9) vs SIGTERM(15)

  • SIGKILL(9) : 강제 종료, 개발자가 프로그램을 개발할 때 핸들링을 할 수 없다.
    개발자가 구현한 종료 함수가 호출되지 않고 즉시 프로세스가 종료되어 데이터가 유실되거나 리소스가 제대로 닫히지 않는 문제가 발생할 수도 있다.
  • SIGTERM(15) : 정상 종료

🌵 참고 URL

profile
Hello! I am Ogu, a developer who loves learning and sharing! 🐤🐤 <br> こんにちは!学ぶことと共有することが好きな開発者のOguです!🐤

0개의 댓글