리눅스(Linux)에서 프로세스 확인&종료하기

 

프로세스란?

프로세스의 일반적인 정의는 “실행중인 프로그램” 을 뜻한다. 컴퓨터의 CPU 에서 실행되는 모든 프로그램을 프로세스라고 한다.
각각의 프로세스는 고유 번호인 프로세스 ID ( PID )를 가지고 더 이상 할당할 PID 가 없으면, 사용되지 않은 가장 낮은 숫자로 되돌아가 다시 할당 한다.

-프로세스의 상태정보

R 프로세스가 실행중 또는 실행 가능한 상태
Z 프로세스가 종료되었지만 부모프로세스가 먼저 종료된 좀비 상태
T 정지된 상태 (suspend)
S 인터럽트를 기다리는 휴면 상태 (sleeping)
D 인터럽트가 될 수 없는 대기 상태 (uninterruptible sleep)

 

*좀비 상태 : 실행이 끝났는데도 종료되지 못하고 메모리상에 남아 있는 프로세스

 

ps 명령어

프로세스의 이름, 상태, PID등 프로세스에 관한 정보를 확인하는 명령어이다.

ps [옵션]

[ps 옵션]

  • ‘-e’ : 모든 프로세스 정보를 출력한다.
  • ‘-f” : 프로세스의 다양한 정보를 출력한다.
  • ‘-a’ : 실행중인 전체 사용자의 모든 프로세스를 출력한다.
  • ‘-u’ : 프로세스를 실행한 사용자 정보와 프로세스의 시작 시간 등을 출력한다.
  • ‘-x’ : 제어 터미널을 갖지 않는 프로세스(백그라운드에서 실행되는 프로세스)를 출력한다.

 

ps 예시:

ps -ef

위 예시는 보편적으로 많이 사용되는 명령어이며 현재 실행 중인 프로세스들의 정보를 조회하는 명령어이다.
( PID,PPID 와 같은 추가 정보를 표시하며 전체 프로세스 목록을 표시함 )

ps -aux

위 예시는 ps -ef 와 유사하지만 다른 옵션을 사용하여 프로세스의 정보를 출력하는 명령어이다.
( 모든 사용자의 프로세스를 보여주며, 사용자 관련 상세 정보와 터미널 여부를 표시함 )

ps -ef | grep <텍스트>

위 예시는 ‘ps -ef’ 의 출력을 ‘grep’ 명령어의 입력으로 전달 받아, <텍스트> 가 포함된 라인을 찾아 출력하는 명령어이다.
*grep : (Global Regular Expression Print) 의 약자로 텍스트를 검색하고 출력하는데 사용되는 명령어

 

kill 명령어

kill 명령어는 리눅스 및 유닉스 기반 시스템에서 프로세스를 종료하는 명령어로 kill 명령어를 사용하여 프로세스에 종료 시그널을 보낼 수 있다. 종료 시그널은 프로세스에게 특정 동작을 수행하도록 지시한다.

kill [옵션] [프로세스 ID]

[kill 옵션]

  • ‘-9’ 또는 -KILL ,  –signal=9 : 강제로 프로세스를 종료하는 신호이다
  • ‘-15’ -TERM, –signal=15 : 기본적인 종료 시그널 신호이다

 

[ SIGNAL 목록 ]

번호 시그널 의미
1 SIGHUP 종료
2 SIGINT 인터럽트 종료
3 SIGQUIT 종료 후 코어 덤프 파일 생성
4 SIGILL 잘못된 명령어 신호
5 SIGRAP 디버깅 목적으로 사용되는 신호
6 SIGABRT 중단 신호
7 SIGBUS 프로세스 버스 오류
8 SIGFPE 0으로 나눌 때 발생하여 종료되는 신호
9 SIGKILL 강제 종료
10 SIGUSR1 사용자 정의 조건 신호
11 SIGSEGV 프로세스가 오작동할 때 커널에 의해 프로세스로 전송되는 신호
12 SIGUSR2 사용자 정의 조건 신호
13 SIGPIPE 구문이 이상한 파이프에 대한 신호
14 SIGALRM real-time 또는 clock-time이 종료되면 전송되는 신호
15 SIGTERM 실행 중지를 프로세스에 요청하는 신호
16 SIGSTKFLT 스택 오류 신호
17 SIGCHLD 상위 프로세스가 하위 프로세스를 잃으면 상위 프로세스에 전송되는 신호
18 SIGCONT 프로세스가 SIGTSTP 또는 SIGSTOP 신호에 의해 중지된 후 계속 실행되게 하는 신호
19 SIGSTOP 프로세스 일시 중지, 프로세스가 신호 무시 불가
20 SIGTSTP 프로세스 일시 중지, 프로세스가 신호 무시 가능
21 SIGTTIN 프로세스가 tty에서 읽기 시도를 하면 프로세스가 받는 신호
22 SIGTTOU 프로세스가 tty에서 쓰기 시도를 하면 프로세스가 받는 신호
23 SIGURG 긴급하게 읽을 데이터가 있거나 데이터가 매우 큰 경우 프로세스에 보내는 신호
24 SIGXCPU 할당된 시간을 초과하여 CPU를 사용하는 경우 시스템이 프로세스에 보내는 신호
25 SIGXFSZ 파일을 생성할 때 허용하는 크기를 넘을 경우 발생하는 신호
26 SIGVTALRM 프로세스에서 사용하는 CPU의 시간이 경과하면 전송되는 신호
27 SIGPROF 시스템이 사용하는 CPU 시간이 경과할 때 전송하는 신호
28 SIGWINCH 프로세스가 크기를 변경하는 터미널에 있을 때 받는 신호
29 SIGIO SIGPOLL의 별칭, SIGPOLL : 비동기 I/O 이벤트가 발생하면 프로세스에 전송하는 신호
30 SIGPWR 전원 장애를 인해 시스템이 프로세스에 보내는 신호
31 SIGSYS 시스템 호출에 유효하지 않은 매개변수를 제공하는 프로세스에게 전송하는 신호

 

pkill 명령어

pkill은 프로세스 이름이나 조건을 기반으로 프로세스를 종료하는 명령어이다.
특정 패턴에 매치되는 프로세스들을 간단하게 종료하는 데 사용된다.

pkill [옵션] 패턴

 

[pkill 옵션]

  • ‘-9’ 또는 -KILL ,  (–signal=9) : 강제로 프로세스를 종료하는 신호이다
  • ‘-15’ -TERM, (–signal=15) : 기본적인 종료 시그널 신호이다
  • ‘-u’ 다음에 오는 User가 실행시킨 프로세스를 종료하는 옵션이다.

 

pkill 예시:

pkill -9 Fullmoon 

위 예시는 “Fullmoon” 이라는 이름을 가진 모든 프로세스에게 강제 종료 시그널을 보내는 명령어이다.

pkill -u <username> 

위 예시는 “<username>” 에 해당하는 User 가 실행시킨 프로세스를 모두 종료하는 명령어이다.