프로세스에게 부여되는 우선순위
프로세스는 실행중인 프로그램을 말한다.
프로그램은 최초 하드디스크에 저장되며 프로그램을 실행하면 하드디스크 → RAM (주기억장치)로 옮겨져 상주한다. 이 때 프로세스에게 PID라는 번호가 할당되어 관리된다.
하나의 시스템은 여러개의 프로그램을 동시에 실행할 수 있다. 하지만 여러 프로그램을 시스템이 동시에 처리하기에는 무리가 있다. 따라서 RAM에 상주한 프로세스들은 우선순위가 부여되서 관리된다.
프로세스의 우선순위
리눅스에서는 ps -l 명령을 통해 우선순위를 확인할 수 있다.
ps 명령에서는 프로세스에게 보여되는 PID와 부모프로세스를 말하는 PPID 및 해당 프로세스를 실행시킨 사용자의 UID나 CMD (명령어) 모두 확인할 수 있다.
이 화면에서 우선순위와 관련된 항목은 PRI와 NI 번호이다.
PRI 번호는 프로세스를 처리하는 운영체제가 참고하는 항목으로 사용자가 인위적으로 조작할 수 없다. 시스템의 상황에 따라 적절하게 부여되며 낮은 값일수록 우선순위가 높다.
NI 번호는 관리자와 사용자가 조작할 수 있는 우선순위 값이다. PRI와 마찬가지로 낮은 값일수록 우선순위가 높으며 -20부터 19 까지 설정이 가능하다.
운영체제는 NI 값을 참고해서 PRI값을 조정해가며 우선순위를 움직인다. NI를 조작할 수 있는 관련 명령어로는 nice나 renice 가 있다.
nice 명령어
]# nice [프로세스명]
]# nice -n [숫자] [프로세스명]
]# nice -[-숫자] [프로세스명]
▷ NI값 증감
▷ 새로운 프로세스 추가
프로세스에 부여된 NI 값을 조정해 우선순위를 변경할 수 있는 명령어다.
지정하고싶은 NI값과 프로세스를 동시에 입력하며 새로운 프로세스를 추가한다.
보통 기본적으로 설정된 NI값은 0번이고 [-20 ~ 19] 사이의 번호를 지정할 수 있으며 낮은 값일수록 우선순위가 높아진다. nice는 기본적으로 설정된 값을 증감 (+,-) 하는 형식으로 사용된다.
일반사용자는 NI값의 (+)만 설정할 수 있으며, 관리자는 (+,-) 모두 가능하다.
1. 프로세스 NI값 -10 적용
bash 쉘을 하나 더 실행하면서 NI 값을 -10 지정해보았다.
기본 NI값은 0이지만, -10으로 지정된 bash가 하나 더 실행되며 PRI값도 기존값 (80)보다 떨어지면서 우선순위가 높아진걸 확인할 수 있다.
2. 프로세스 NI값 +10 (기본값)적용
nice값의 기본 옵션은 +10이다.
아무런 옵션없이 [프로세스명]만 입력할 경우, NI값이 기본값(0)이 아닌 10이 지정된다.
renice 명령어
]# renice [NI값] [PID]
-u : 다른 사용자 지정
-g : 그룹 지정
▷ NI 값 지정
▷ 기존 프로세스와 교체해서 적용
nice 명령과 마찬가지로 프로세스의 NI 값을 변경할 수 있는 명령어다.
nice에서는 NI값을 기본값 0 에서 조정했다면, renice에서는 [-20 ~ 19] 사이의 값을 하나 지정할 수 있다.
또한 nice에서는 새로운 프로세스를 만들어 NI값을 적용했지만, renice는 기존 프로세스에 NI값을 변경하는 형식이다.
1. 해당 PID의 NI값 바꾸기
PID 번호가 2251인 bash 라는 프로세스의 NI값이 기존에는 기본값 (0)을 가지고 있었다.
이후 renice 명령어를 통해 NI 값을 -15로 변경했다.
성공적으로 NI값이 바뀌었으며 동시에 PRI값도 줄어들었다.
2. 다른 사용자의 NI 값 바꾸기
kang 이라는 계정을 만들어 renice 명령어를 사용해 보았다.
kang 계정의 UID 값은 500이다. -u 옵션을 이용해 kang 계정의 NI값을 모두 10으로 지정했다.
UID값이 500을 가진 프로세스의 우선순위가 모두 10으로 변경되었다는메시지가 출력된다.
(500 : old priority 0, new priority 10)
이후 kang 계정으로 들어가 확인해보니 NI값이 모두 10으로 변경되었다.
프로세스와 관련된 /proc 디렉터리
/proc 디렉터리는 가상 파일시스템의 일종이다.
ps 명령어는 /proc 디렉터리를 참조한다. 여기서는 시스템에 동작중인 프로세스의 상태정보나, 기타 시스템 및 하드웨어 정보 등을 확인할 수 있는 곳이다.
/proc 디렉터리는 프로세스와 커널의 내부정보 제공을 위해 만들어진 공간이다.
새로운 프로세스가 생성되면 /proc 디렉터리 안에 프로세스와 동일한 PID를 가진 디렉터리가 생성되고 그 안에 해당 프로세스에 관련된 정보가 저장된다.
# /proc/PID 디렉토리 내부
bash 프로세스의 PID번호는 2251이다. 이 역시 /proc 디렉토리에 들어있다.
여기서 bash 프로세스와 관련된 세부정보들을 확인할 수 있다.
주요 구성요소는 아래와 같다.
comdline : 명령행 옵션 정보
cwd : 작업 디렉터리
environ : 프로세스 환경 정보
exe : 해당 프로세스를 실행시킨 명령어
fd : 파일지정자에 대한 정보
maps : 실행 명령과 관련 라이브러리 파일의 메모리 맵 정보
mounts : 시스템의 마운트 정보
root : 해당 프로세스의 루트 디렉터리
stat : 해당 프로세스의 상태 -> ps명령을 통해 사용된다.
statm : 프로세스의 메모리상태에 대한 정보
status : 프로세스의 상태정보를 담고있는 파일
1. /proc/PID 내부 심볼릭링크 파일
bash 프로세스의 PID 번호인 2251 디렉토리 내부로 들어왔다.
여기서 심볼릭 링크가 걸려있는 파일은 총 세 가지 있다.
cwd는 작업중인 디렉토리를 의미하며 현재위치를 가지고 있다.
exe에서는 프로세스를 실행시킨 명령어, 즉 bash 명령어의 위치를 가리킨다.
root 파일은 작업자의 루트디렉토리, 지금은 관리자계정이라서 루트(/)를 가리킨다.
2. 프로세스의 환경정보
environ 파일에서는 프로세스 자체의 환경정보를 가지고 있다.
지금 실행되는 bash 프로세스는 putty를 이용해 VMware에 설치된 CentOS에 접속한 상태이다.
SSH 를 사용해서 접속했기 때문에 접속한 클라이언트의 이더넷어뎁터 IP주소 (192.168.202.1) 과 SSH를 통해 원격접속한 호스트의 IP주소 (192.168.202.128) 및 사용자의 PATH 정보 등이 나타난다.
'개인 > 리눅스' 카테고리의 다른 글
[리눅스] 레드햇 계열의 패키지관리 (RPM,YUM) (0) | 2020.02.11 |
---|---|
[리눅스] 프로세스 스케줄링 (at,crontab) (0) | 2020.02.10 |
[리눅스] 디스크 쿼터 사용법 (quotacheck, repquota) (0) | 2020.02.08 |
[리눅스] swap 생성 및 관리 (mkswap / dd) (0) | 2020.02.07 |
[리눅스] 사용자 계정 관리 usermod 명령어 (1) | 2020.02.06 |