프로세스 확인(ps, top, htop), kill
리눅스는 멀티 태스킹을 지원합니다. 여러 프로세스가 생성되고 사용된다는 것이죠. 이 과정에서 서로 충돌한다던지, 알 수 없는 이유로 종료된다면 해당 프로세스를 확인해볼 필요가 있습니다.
단순히 포트 확인을 하려면 간편하게 lsof를 이용할 수도 있습니다.
sudo lsof -i tcp:80 // 80 포트를 누가 사용하고 있니
프로세스를 구분하는 기본적인 정보
PID(process Id) | 프로세스 시작 시 할당되는 프로세스 식별 번호 |
PPID(parent process Id) | 부모 프로세스의 pid |
UID(user Id) | 프로세스를 소유하는 사용자 계정을 식별하는 번호 |
GID(group Id) | 프로세스가 속해있는 그룹을 알려주는 식별 번호 |
file descriptor(파일 디스크립터) | 프로세스 읽기/쓰기를 위해 어떤 파일을 열고 있고, 파일의 어떤 위치에 존재하는 지를 기록 |
필자는 PID를 통해 특정 프로세스를 제거하는 방법을 주로 사용해왔다.
sudo kill PID
sudo kill 3104
ps를 통해 프로세스 관리하기
-aux와 -ef 옵션이 주로 사용된다.
옵션을 사용하지 않으면 현재 로그인 사용자가 실행하는 프로세스만 보여준다
1. -aux
a : 다른 사용자의 프로세스도 표시함
x : 화면에 보이지 않는 프로세스도 표시함.
u : 프로세스를 사용한 사랑자가 누구인지, 프로세스의 실행 시간을 표시합니다.
위 옵션은 보통 아래와 같이 조합되어 사용된다.
-ax 두 옵션을 함께 사용하면 현재 실행중인 모든 프로세스 확인 가능
-aux : 프로세스의 시스템 자원 사용률을 확인할 수 있다.
ps -aux
User 소유자
PID 식별번호
%CPU cpu차지율
%MEM 메모리점유율
VSZ RSS 실제 메모리 사용량
TTY 프로세스가 시작되고 있는 터미널
STAT 현재 상태 (RSDTZ 이렇게 5가지 상태가 존재)
=> R(runable 실행 대기 상태), S(sleep), D(in Disk wait 입출력을 기다리는 상태), T(sTopped. 스탑 상태)
Z (zombie. 죽은 상태. 발견되면 kill 명령어로 해당 프로세스를 종료 시켜야 함)
START 시작 시간 TIME 총 사용 시간
COMMAND 프로세스를 실행한 명령
2. -ef
ppid를 가지고 있어 보통 부모 프로세스와의 관계를 파악할 때 사용된다.
ps -ef
3. top
cpu, 메모리 사용률을 체크할 때는 ps -aux보다 top이 사용되고, 그 개선판인 htop이 주로 사용된다.
5초마다 내용이 업데이트되고, CPU를 많이 점유하는 프로세스부터 차례대로 출력한다.
N(shift + n)을 누르면 pid순서대로, M을 누르면 메모리 사용률 순서대로, T는 사용 시간, P는 cpu 점유율(기본값) 순으로 정렬하며
q를 누르면 top을 종료합니다.
윗부분은 시스템 업타임, 평균 부하, 전체 프로세스 정보 등 시스템 상태를 요약해서 보여줍니다.
여기서 부하량을 확인하려고 load average를 신경써서 확인한 적이 있다.
top을 활용하여 프로세스를 관리하는 방법은 추후에 다뤄보도록하고 넘어가자.
htop을 통해 프로세스 관리하기
top도 괜찮지만 htop이 좀 더 편리하다.
sudo apt-get install htop
cpu, memory 사용량과 실행중인 프로세스 등을 확인할 수 있다.
프로세스 kill
실행 중인 프로세스를 종료하려면 kill 명령어를 사용하면 된다.
kill은 이름과 달리 프로세스 종료 뿐만 아니라 무언가 신호를 보내어 프로세스 상태를 변경시키기 위해 사용되는 것이다.
kill -[신호] [pid] // 신호 기본 값은 15 SIGTERM으로 종료를 의미함
신호는 kill -l 로 확인할 수 있다.
1) SIGHUP 무중단 재실행
9) SIGKILL 강제 종료 (종료로도 종료되지 않을 시 사용)
15) SIGTERM 종료
자, 그러면 프로세스 종료를 직접 해보자
brvae 브라우저를 하나 켜놨으니 이를 종료 시키기 위해서 pid를 알아보도록 하자
kill 15244
무자비하게 브레이브 브라우저가 종료되는 것을 확인할 수 있다.
백그라운드에서 프로세스 실행하기
프로세스는 foregorund, background로 나뉘어 실행된다.
foreground는 명령을 실행하여 프로세스가 종료될 때까지 대기하는, 쉽게 말해 우리가 직접 보고 있는 곳이고
background는 우리가 보이지 않지만 실행되고 있는 뒷편입니다.
시간이 많이 걸리는 명령어는 백그라운드로 보내놓고, foreground에서 다른 작업을 하고 있을 수 있습니다.
프로세스를 백그라운드로 보내는 방법은 실행 명령 뒤에 &만 붙이면 됩니다.
find 명령어를 아래와 같이 백그라운드로 실행할 수 있습니다.
sudo find -name a* &