( 1 ) 시그널(Signal)
kill, killall 명령어와 시그널은 밀접한 관계가 있으므로 시그널에 대해 알 필요가 있음.
시그널이란 프로세스에게 어떤 이벤트의 발생을 알리기 위해 전달되는 소프트웨어 인터럽트임.
유닉스/리눅스 운영체제는 매우 다양한 종류의 시그널이 있으며 이러한 시그널은 각각의 의미를 가지고 사용됨.
시그널을 일으키는 이벤트는 아래와 같음.
1. Hardware Exception (나누기 0 등)
2. Software Condition (Alarm 시간, Expire 등)
3. 단말기에서 발생하는 사용자 입력 (^C, ^Z 등)
4. kill 등과 같은 시스템 콜
시그널 종류
번호
|
시그널 이름
|
발생 및 용도
|
디폴트 action
|
1
|
SIGHUP(HUP)
|
연결끊기 (프로세스의 설정파일을 다시 읽는데 사용됨)
실행종료 (로그아웃하거나 모뎀 접속을 끊을 때 보내짐)
|
종료
|
2
|
SIGINT(INT)
|
인터럽트 (실행종료, CTRL+C 를 입력할 때 보내짐)
|
종료
|
3
|
SIGQUIT(QUIT)
|
Quit
(실행종료, CTRL+/ 를
입력할 때 보내짐)
|
종료
(코어덤프)
|
4
|
SIGILL(ILL)
|
잘못된 명령
|
|
5
|
SIGTRAP(TRAP)
|
트렙 추적
|
|
6
|
SIGIOT(IOT)
|
IOT 명령
|
|
7
|
SIGBUS(BUS)
|
버스 에러
|
|
8
|
SIGFPE(FPE)
|
부동 소수점 에러
|
종료
|
9
|
SIGKILL(KILL)
|
무조건적으로 즉시 중지함.
이 시그널은 잡히지 않음.
|
종료
|
10
|
SIGUSR1(USR1)
|
사용자 정의 시그널1
|
종료
|
11
|
SIGSEGV(SEGV)
|
세그멘테이션 위반 (허가되지 않은 메모리 영역 접근)
|
|
12
|
SIGUSR2(USR2)
|
사용자 정의 시그널2
|
종료
|
13
|
SIGPIPE(PIPE)
|
읽을 것이 없는 파이프에
대한 시그널
(읽으려는 프로세스가 없는데 파이프에 쓰려고 함)
|
종료
|
14
|
SIGALRM(ALRM)
|
경보(Alarm) 시그널
(Alarm(n)에 의해 n초 후 생성됨)
|
종료
|
15
|
SIGTERM(TERM)
|
소프트웨어 종료 시그널
(일반적으로 kill 시그널이 전송되기 전에
전송됨.
잡히는 시그널이기 때문에
종료되는 것을 트랙할 수 있음.)
|
종료
|
16
|
SIGTKFLT
|
코프로세서 스택 실패
|
|
17
|
SIGCHLD(CHLD)
|
프로세스 종료 시 그 부모
프로세스에게 보내지는 시그널
|
무시
|
18
|
SIGCONT(CONT)
|
Continue
(STOP 이나 TSTP 에 의해 정지된 프로세스가
다시 실행을 계속함)
|
|
19
|
SIGSTOP(STOP)
|
정지 시그널
(SIGSTP 와 같으나 잡거나 무시할 수 없음.
무조건으로 즉각적으로 정지함.)
|
프로세스 정지
|
20
|
SIGTSTP(TSTP)
|
키보드에 의해 발생하는 시그널로 Ctrl+Z로 생성됨.
실행을 정지 후 다시 실행을
계속하기 위하여 대기함.
(터미널 정지 문자)
|
프로세스 정지
|
21
|
SIGTTIN
|
백그라운드에서의 제어터미널
읽기
|
프로세스 정지
|
22
|
SIGTTOU
|
백그라운드에서의 제어터미널
쓰기
|
프로세스 정지
|
23
|
SIGURG
|
소켓에서의 긴급한 상태
|
|
24
|
SIGXCPU
|
CPU 시간 제한 초과. setrlimit(2) 메뉴얼
패이지 참조
|
|
25
|
SIGXFSZ
|
파일 크기제한 초과. setrlimit(2) 메뉴얼 패이지 참조
|
|
26
|
SIGVTALRM
|
가상 시간 경고. setitimer(2) 메뉴얼 패이지 참조
|
|
27
|
SIGPROF
|
프로파일링 타이머 경고. setitimer(2) 메뉴얼 페이지 참조
|
|
28
|
SIGWINCH
|
윈도우 사이즈 변경
|
|
29
|
SIGIO
|
기술자에서 입출력이 가능함. fcntl(2) 메뉴얼 참조
|
|
30
|
SIGPWR
|
전원 실패
|
|
31
|
UNUSED
|
사용 안함
|
( 2 ) kill 명령어
kill 명령어는 지정한 프로세스에 지정한 시그널을 보냄.
시스템에 문제가 생겨 해당 프로세스를 터미널에서 종료시킬 경우 유용함.
만약 kill 명령으로 종료되지 않는 프로세스가 있다면 -9 옵션을 이용하여 프로세스를 강제 종료시킴.
보통 ps 명령어를 이용해서 종료시킬 프로세스 정보를 확인함.
사용예 )
ps 명령어로 확인된 프로세스 정보를 확인함.
PID 값이 1945 라면 아래와 같이 입력해서 종료시킴.
kill 1945
만일 kill 명령으로 종료되지 않는다면 -9 옵션을 이용해서 강제 종료시킴.
kill -9 1945
kill -HUP PID 명령어를 이용하면 종료된 프로세스가 다시 되살림.
kill -HUP 1945
kill 옵션은 아래와 같음.
-l : 시그널 리스트를 나열함. 시그널 번호와 시그널 이름은 매치되어서 보여줌.
-s : 특별히 보낼 시그널을 지정함. 시그널 번호나 시그널 이름을 지정함.
-숫자 : -l 옵션을 입력하여 보여진 시그널 리스트에서 시그널 숫자와 매치되는 시그널을 지정함. 보통 -1(-HUP, 프로세스 재활성화) 와 -9(-KILL, 프로세스 강제 종료) 를 많이 쓰임.
( 3 ) killall 명령어
killall 명령어는 프로세스 번호가 아닌 이름으로 프로세스를 종료시키는 명령어임.
기본형식 : killall [OPTION]... [--] NAME...
killall -l, --list
killall -V, --version
-e,--exact 매무 긴 이름에 대한 정밀한 일치 요구
-I,--ignore-case 대소문자 구분없이 프로세스 이름 일치
-g,--process-group 프로세스를 대신해서 프로세스 그룹 종료
-y,--younger-than 지정된 시간보다 이전 프로세스 종료
-o,--older-than 지정된 시간보다 이후 프로세스 종료
-i,--interactive 종료 전에 확인 요구
-l,--list 모든 알려진 시그널 이름 나열
-q,--quiet don't print complaints
-r,--regexp 확장된 정규 표현식으로 이름 해석
-s,--signal SIGNAL SIGTERM 대신 해당 시그널로 전송
-u,--user USER 해당 사용자로 실행된 프로세스만 종료
-v,--verbose 시그널이 성공적으로 전송될 경우 보고
-V,--version 버전 정보 출력
-w,--wait 프로세스가 종료될 때까지 대기
( 4 ) ps 와 kill 명령어 조합으로 여러 프로세스 종료
종료시킬 프로세스 리스트를 나열함.
ps ax | grep httpd
↓
해당 프로세스들의 PID 만 모음.
ps ax | grep httpd | awk '{print $1}'
↓
PID 하나씩 kill 명령어에 매개변수로 넘겨서 다 종료시킴.
ps ax | grep httpd | awk '{print $1}' | xargs kill
또는 아래와 같이 사용 가능함.
kill -9 `ps -ef | grep httpd | grep -v grep | awk '{print $2}'`
( 5 ) killall 명령어 사용으로 여러 프로세스 종료
아래와 같이 killall 명령어 이용해서 종료시킬 프로세스 이름 지정함.
killall httpd
ps.
만일 kill -9 1 명령어를 입력하면 시스템이 다운됨.
PID 가 1 은 init 임.
============================================================
본 게시물은 KOROMOON 님께서 작성하였으며 CCL (Creative Commons License) 에서 "저작자표시-비영리-동일조건변경허락" 이용조건으로 자료를 이용하셔야 합니다.
댓글 없음:
댓글 쓰기