kjh00n의 기록저장소
Linux 시스템 프로세스 관리 본문
● 프로세스
- 일반적으로 사용자가 컴퓨터를 사용하기 위해 프로그램이나 프로그램을 실행하기 위한 데이터를 묶어서 작업이라고 하는데 이 작업을 컴퓨터 시스템에 실행 의뢰하여 컴퓨터의 커널에 등록된다.
- 커널에 등록된 작업, 프로그램을 프로세스라고 이야기한다.
- 커널, 운영체제의 관리 하에 놓인 프로그램, 작업을 프로세스라고 하며 일반적으로 실행되는 모든 프로그램이나 명령을 프로세스라고 한다.
- 문제는 커널이 해당 프로세스를 구별하고 관리해야 하기 때문에 식별을 해야하는데 그래서 부여된 번호를 PID라고 한다.
- 자식 프로세스 : 사용자가 특정 프로세스를 생성 시(프로그램 구동) 특정한 프로세스에 종속된 프로세스
- 부모 프로세스 : 그 특정한 프로세스
- PID : 프로세스 식별번호
- PPID : 부모 프로세스 식별번호
EX)
Shell(부모) - pwd(자식)
Shell(부모) - ping 8.8.8.8(자식)
→ 부모프로세스를 종료하면 자식프로세스도 종료된다.
→ 간혹 자식프로세스가 종료되지 않는데 그것을 좀비 프로세스라고 한다.
● 프로세스의 기본 정보 확인 명령어
ps [옵션]
[-e] | 프로세스 전체 목록 출력 |
[-f] | PID,PPID 정보를 포함하여 출력 |
[-l] | f보다 더 자세한 정보 출력 |
[-u] [사용자] | 특정 사용자 이름과 시작된 시간을 출력 |
ps -l을 쳤을 때 나오는 용어
PRI (Priority) : 우선순위 (기본값:80) // 시스템이 NICE데이터를 이용하여 계산한 우선순위 값
(우선순위 값이 낮을수록 높다)
NI (Nice) : 프로세스 동작의 우선순위를 설정
(의도적으로 PRI값 조정은 불가하며 Nice데이터를 조정하여 PRI값을 조정한다.)
※ pstree : 연관된 프로세스를 한눈에 볼 수 있다
● siganl
- 리눅스는 사용자 또는 프로그램이 프로세스를 제어할 수 있도록 시그널(신호)을 지원한다.
- 이 신호를 이용하여 사용자나 프로그램은 직접적으로 프로세스에 어떠한 행위를 할 수 있다.
- 일반적으로 원하는 프로세스를 강제로 종료하는 경우 많이 사용
● 신호의 종류를 확인하는 명령어
kill -l
● 신호를 전송하는 명령어
kill -[신호] [PID]
SIGKILL(9) | 프로세스를 강제 종료 |
SIGINT(2) | Ctrl + C 기능수행 |
SIGUP(1) | 프로세스 실행 |
SIGCONT(18) | 일시정지 된 프로세스 다시 시작 |
SIGSTOP(19) | 프로세스 일시정지 |
● 신호를 전송하는 명령어(프로세스 이름)
pkill -[신호] [PID]
신호를 문자열로 적어도 되고 번호로도 적어도 된다.
● 프로세스 우선순위
- 한번에 여러 개의 프로세스가 동작
- 여러개의 프로세스는 CPU를 사용하기 위해 경쟁하지만 모든 프로세스가 공평하게 자원을 배분 받는 것은 아님.
- 프로세스의 중요도에 따라 빨리 처리해야 하는 경우 우선순위가 달라짐.
● 프로세스 우선순위 확인 명령어
ps -el
● Nice값 설정 명령어 (이미 실행된 프로세스의 Nice 값은 조정이 불가능하다.)
nice -n [우선순위 값] [실행할 명령어,PID]
ex) nice -n 5 ping 8.8.8.8
우선순위를 높이려면 우선순위 값을 낮춰야한다.
우선순위 값을 낮추려면 Nice값을 낮춰야한다.
-5를 붙여서 해보자
※ -80을 해도 -20이 적용되어 최대 60으로밖에 안낮춰진다.
※ +20을 해도 최대 99까지밖에 적용되지 않는다.
● 실행중인 프로세스의 Nice값을 변경하는 명령어
renice -n [우선순위 값] -p [PID]
프로세스의 실행 방식이나 상태 조정
→프로세스는 동작되는 방법,실행되는 방식에 따라 포그라운드와 백그라운드로 나뉜다.
→일반적인 명령은 터미널환경에서 실행되어 프로세스로 동작하고 그 이후 정상 종료된다.
포그라운드 : Shell환경에서 명령을 입력하고 Enter를 치면 그 명령의 출력 결과가 화면(Shell)에 출력되고
출력이 완료되면 다시 명령 대기 상태로 돌아가는 방식
(추가적인 명령을 입력하려면 추가적인 Shell환경을 마련하거나 이전 명령이 종료되어야 한다.)
백그라운드 : Shell환경 뒤에서 프로세스가 동작하는 것으로 프로세스가 백그라운드에서 시작되면, Shell환경은
바로 명령 대기 상태로 돌아간다.
(백그라운드에서 동작하는 프로세스 여부와는 상관없이 추가적인 작업이 가능하다.)
보통 오래걸리는 작업이나 항시 켜두어야 하는 작업의 경우 백그라운드로 실행
(작업 도중에 추가 명령이나 입력이 필요없어야 한다.) <===백업작업
서스펜드(Suspend) : 일시정지
프로세스의 실행을 멈추게 하는 것
종료도 아니고 실행중도 아닌 말그대로 일시정지
리눅스에서는 포그라운드로 실행중인 프로세스를 일시정지하면 백그라운드로 넘어가서 일시정지 대기상태로 기다림.
● 포그라운드/백그라운드 명령어
- 포그라운드 명령 : tail -f /var/log/messages
- 포그라운드 프로세스 강제 종료 : Ctrl C
- 포그라운드 프로세스 일시 정지 : Ctrl Z
- 백그라운드 프로세스,작업,서스펜드 된 작업 확인 : jobs
- 백그라운드 프로세스,작업,서스펜드 된 작업 확인(PID) : jobs -l <===kill로 PID를 알아야할 때
- 백그라운드 명령 : tail -f /var/log/messages &
& : 명령을 백그라운드로 실행하겠다.
- 백그라운드 프로세스 종료 : kill -9 PID
- 백그라운드 프로세스를 포그라운드로 전환 : fg [작업번호]
- 백그라운드로 넘어간 서스펜드 프로세스를 백그라운드에서 실행 : bg [작업번호]
작업번호는 jobs를 누르면 나온다.
- 백그라운드에 있는 프로세스를 일시정지 시키려면 19번 SIGNAL을 보내면 된다.
- nohup : 터미널이 종료되도 입력했던 명령어를 유지한다.
'Linux' 카테고리의 다른 글
Linux 파티션 분할 실습 (0) | 2024.10.25 |
---|---|
Linux 디스크 (0) | 2024.10.25 |
Linux 파일 속성 (0) | 2024.10.24 |
Linux 확장 권한 (ACL) (0) | 2024.10.24 |
Linux 특수 권환 (0) | 2024.10.23 |