일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Collection
- container
- AOP
- Pipeline
- mybatis
- ansible
- 액세스회선
- 소켓
- docker
- Set
- 라우터
- STREAM
- DevOps
- jdk
- LAN어댑터
- Jenkins
- IntelliJ
- Java
- Linux
- gradle
- JPA
- 허브
- Spring
- tomcat
- sonarQube
- map
- post
- 방화벽
- cloud
- 캐시서버
- Today
- Total
거북이-https://velog.io/@violet_evgadn 이전완료
리눅스에서의 프로세스 관리 본문
ps
◎ 명령어 ps
ps는 현재 프로세스의 목록 및 상태를 확인하는 명령어이다.
ps는 단독으로 사용하기보다는 옵션, 특히 "-ef"라는 옵션을 붙여 활용하며, 서버 측에서 실행되고 있는 프로세스가 많을 것이기 때문에 grep을 활용하여 프로세스 리스트 중 원하는 프로세스를 찾는 방식으로 많이 활용한다.
ps [Option]
ps 옵션
- -a : 데몬 프로세스처럼 터미널에 종속되지 않은 모든 프로세스를 출력
- -u : 특정 사용자의 프로세스 정보를 확인할 때 사용. 사용자를 지정하지 않으면 현재 사용자를 기준으로 정보 출력
- -x : 로그인 상태에 있는 동안 완료되지 않은 프로세서들을 보여줄 때 사용
- 유닉스 시스템에선 사용자가 로그아웃을 해도 프로세서가 계속 동작하게 할 수 있는데 이러한 터미널이 없음에도 실행되는 프로세서들을 -x 옵션을 통해 확인할 수 있음
- -e : 커널 프로세스를 제외한 모든 프로세스를 출력
- -f : 풀 포맷으로 모든 정보를 보여줌
- Unix 스타일로 출력해주는 옵션으로 UID, PID, PPID 등이 표시됨
-a, -u, -x와 -e, -f 사이를 띄어놓은 이유가 있는데 ps 명령어는 주로 "ps -aux"나 "ps -ef" 2개 중 1가지 방법으로 활용하기 때문이다. 사실 ps -aux도 거의 안 쓰이고 ps를 사용한다면 대부분 ps -ef로 사용한다.
- ps aux : 시스템에 동작중인 모든 프로세스를 소유자 정보와 함께 BSD 포맷으로 출력
- ps -ef : 시스템에 동작중인 모든 프로세스를 Full Format으로 자세히 출력
ps -ef 예시
ps -ef만 입력했을 때 내용이 너무 많아 보기 편하게 하기 위하여 "grep /usr/bin"을 통해 /usr/bin을 포함하고 있는 프로세스들만 출력했다.
◎ ps 테이블 항목
ps -aux 테이블 항목
- USER : 프로세스 소유자 이름
- PID : 프로세스 식별번호(Identifier)
- %CPU : CPU 사용 비율의 추정치
- %MEM : 메모리 사용 비율의 추정치
- VSZ : K 혹은 페이지 단위의 가상 메모리 사용량
- RSS : 실제 메모리 사용량
- TTY : 프로세스와 연결된 터미널
- TTY 값으로 ?가 들어간 경우 백그라운드 프로세스임을 의미함
- STAT : 현재 프로세스 상태 코드
- START : 프로세스 시작 시간
- TIME : 총 CPU 사용 시간
- COMMAND : 프로세스 실행 명령
ps -ef 테이블 항목
- UID : 프로세스 소유자 이
- PID : 프로세스 식별 번호
- PPID : 부모 프로세스의 식별 번호(부모 프로세스 PID)
- C : 프로세스 우선 순위
- STIME : 프로세스 시작 시간
- CMD : 프로세스 실행 명령
- TTY, TIME : 위에서 설명
kill
◎ 명령어 kill
명령어 kill은 프로세스를 강제로 종료하기 위해 사용되는 명령어이다.
"kill -l" 명령어를 통해 프로세스 시그널 종류를 출력할 수 있는데 한 번 확인해 보자.
위 시그널을 이해하기 위해선 kill의 사용법에 대해 먼저 알아야 한다.
kill -[시그널 번호] [PID]
위 사진에서 나타난 1부터 64까지의 시그널 번호는 kill 이후 옵션으로 줄 수 있는 값들을 의미하는 것이다.
조금 더 깊이 들어가 보자면 사실 kill 명령어는 프로세스를 강제로 종료하는 명령어가 아니다.
리눅스에서는 kill 명령어를 통해 프로세스를 지정한 뒤 신호(Signal)를 보내 제어할 수 있다.
이때 지정한 프로세스에 보내는 신호는 시그널 번호를 통해 지정할 수 있으며 시그널 번호에 따라 kill 명령어에 대한 프로세스 처리 방법 또한 달라짐을 유추할 수 있다.
추가적으로 만약 "kill -9" 명령어를 사용하고 싶다면 사실 "kill -SIGKILL"으로 시그널 번호가 아닌 시그널 정보를 직접 입력해 줘도 된다. 단지 이는 매우 불편하므로 시그널 번호를 입력하는 것이 거의 규격화된 것이다.
◎ 시그널 번호
대표적인 시그널은 아래와 같다. 하지만 굳이 외울 필요는 없고, 시그널 번호 9(SIGKILL)에 대해서만 잘 외워두자.
- 1(SIGHUP) : 실행 중인 프로그램이 사용하는 설정 파일을 변경시킨 뒤 변화된 내용을 적용할 때 사용
- 2(SIGNINT) : 현재 작동 중인 프로세스 동작을 멈출 때 사용
- "CTRL + C"와 동일한 역할 수행
- 9(SIGKILL) : 프로그램을 강제 종료할 때 사용
- 15(SIGTERM) : 실행 중인 프로세스를 정상적인 방법으로 종료시키는 신호
- kill 명령에서 신호를 지정하지 않을 경우 시그널 번호가 15로 지정되어 프로그램을 종료함(디폴트 번호)
- kill -9는 컴퓨터 기기의 전원 버튼을 눌러 강제 종료하는 것이고 kill -15는 시작 > 시스템 종료를 눌러 컴퓨터를 원래 방식대로 종료시키는 것으로 생각하면 된다.
- 20(SIGTSTP) : 실행 중인 프로세스를 중지하는 데 사용하는 신호
- "CTRL + Z"와 동일한 역할 수행
- -2는 "종료"시키는 것이고 -19는 "중지"시키는 것이다. 이는 생각보다 큰 차이인데 for문을 100번 돌리는 명령문에서 50번째에 "kill -2"를 입력하면 해당 프로세스는 종료될 것이지만 "kill -19"를 입력하면 50번째 for문에서 중지되었다가 실행 재개 신호를 주면 51번째 for문부터 계속해서 진행한다.
- 18(SIGCONT) : 정지된 프로세스를 재실행
- kill -19나 kill -20을 통해 정지된 프로세스를 다시 실행시킴
만약 특정 프로세스를 종료하고 싶을 경우 아래와 같이 명령어를 입력하면 될 것이다.
kill -9 [프로세스 PID]
프로세스 관련 기타 지식
◎ 서비스
서비스란 시스템과는 독자적으로 구동되어 제공하는 프로세스를 말한다.
즉, 처음 Linux를 구동시켰을 때는 없지만 설정이나 프로그램을 통하여 추가적으로 실행될 수 있는 프로세스를 말한다.
서비스는 대표적으로 웹 서버(httpd), DB 서버(mysqld), FTP 서버(vsftpd) 등이 존재한다.
서비스들은 ".service"라는 확장자명을 가졌으며 "/usr/lib/systemd/system" 디렉터리에 위치하고 있다.
가장 유명한 서비스는 아마 "httpd.service"가 아닐까 싶은데, HTTP Protocol을 지원하는 Daemon으로 HTML 파일을 전송할 수 있게 해주는 프로세스이다.
만약 httpd.service가 없다면 HTTP Protocol을 통해 클라이언트에게 HTML 파일을 보내줄 수 없으므로 웹 서버의 역할을 수행하지 못할 것이다. 따라서 리눅스를 웹 서버로 사용하기 위해선 무조건 httpd.service가 존재하고 실행되고 있어야 할 것이다.
서비스를 실행/종료/재시작시키는 방법은 아래와 같다.
# 서비스 시작
systemctl start [서비스이름]
# 서비스 종료
systemctl stop [서비스이름]
# 서비스 재시작
systemctl restart [서비스이름]
◎ 소켓
네트워크에 대해 공부했다면 소켓에 대해서도 이미 알고 있을 것이다.
리눅스에는 접속 대기 상태의 소켓이 이미 존재하고 있으며 항상 외부에서 커넥션 생성 요청이 오기를 기다리고 있을 것이다.
이 상태에서 외부에서 소켓에 서비스를 요청할 경우 systemd가 소켓을 구동한다.
네트워크에 빗대어 생각해 보자면 systemd가 접속 대기 상태의 소켓을 복사하여 새로운 소켓을 만든 뒤 커넥션을 생성하는 것이다.
이후 외부에서 요청이 끝나면 소켓도 종료될 텐데, 네트워크에 대해 공부했다면 알 수 있듯 접속 대기 상태의 소켓은 그대로 남아 있고 복사되어 외부 요청을 처리한 소켓이 종료되는 것이다.
소켓은 ".socket" 확장자명을 가지고 있으며 "/usr/lib/systemd/system" 디렉터리에 저장되어 있다.
◎ 백그라운드 프로세스 확인
현재 실행되고 있는 백그라운드 프로세스들 출력
jobs
백그라운드 프로세스 중 n번째 프로세스를 포그라운드 프로세스로 상태 변경
fg %n
백그라운드 프로세스를 포그라운드로 가지고 와 프로세스가 끝날 때까지 프로세스 수행 내용을 출력시키는 것이다.
포그라운드 프로세스 중 n번째 프로세스를 백그라운드 프로세스로 상태 변경
bg %n
◎ top
프로세스 목록 중 CPU 사용률이 높은 것부터 차례로 출력하는 명령어로 일정 시간마다 목록이 업데이트된다.
- PID : 프로세스 식별자
- User : 프로세스 소유자의 Username
- PR : 우선순위. 20이 가장 높고 -20이 가장 낮다.
- NI : 마이너스를 가지는 프로세스는 우선순위가 높음
- VIRT : 가상 메모리 사용량(kb). SWAP + RES
- RES : 사용된 물리 메모리 사용량(kb)
- SHR : 사용된 공유 메모리 사용량(kb)
- S : 프로세스 상태 값
- S(Sleeping), R(Running), D(Uniterruptible Sleep), W(Swapped out process), Z(Zombies) 등의 상태가 존재함
- W의 Swap out은 이전에 프로세스 전이도를 공부하며 배웠다
- S(Sleeping), R(Running), D(Uniterruptible Sleep), W(Swapped out process), Z(Zombies) 등의 상태가 존재함
- %CPU : 프로세스가 사용하는 CPU 사용율
- %MEM : 프로세스가 사용하는 메모리 사용율
- TIME+ : 프로세스가 실행된 시간
- COMMAND : 실행된 명령어
Table 외에도 위의 Tasks, %CPU, MiB Mem, MiB Swap을 통해 실행 중인 프로세스 개수, CPU 사용 현황, 메모리 현황 및 스왑메모리 현황을 파악할 수 있다.
'Linux' 카테고리의 다른 글
RAID와 LVM (0) | 2023.04.10 |
---|---|
디스크 관리 (0) | 2023.04.05 |
SW 패키지 관리 & 압축 (0) | 2023.04.04 |
Virtual Network editor(vmnetcfg) (0) | 2023.04.03 |
사용자와 그룹 관리 (0) | 2023.02.16 |