귀염둥이의 메모

[Linux / CentOS 7] 프로세스(process), 작업 (job) 환경 (ps, jobs, fg, bg, kill, nice, renice ...) 본문

Infra & Devops/Linux

[Linux / CentOS 7] 프로세스(process), 작업 (job) 환경 (ps, jobs, fg, bg, kill, nice, renice ...)

겸둥이xz 2021. 8. 21. 22:29
반응형

프로세스

프로세스는 현재 시스템에서 실행 중인 프로그램을 뜻합니다

사용자가 사용한 명령도 프로세스가 되어 실행되는데, 시스템에는 사용자가 실행한 프로세스 외에도 사용자 관리, 메모리 관리, 네트웤 ㅡ접속 관리 등 다양한 기능을 수행하는 많은 프로세스가 실행되고 있습니다

 

프로세스의 번호

각 프로세스는 고유한 번호를 갖고 있고 이를 PID 라 부릅니다

PID 는 1번부터 시작하고 프로세스가 실행되면서 하나씩 증가하여 부여됩니다

최신 리눅스에서 PID 1번은 systemd 프로세스가 실행되고, 2번은 kthreadd 프로세스가 실행됩니다

systemd 프로세스는 나머지 모든 시스템 프로세스의 부모 프로세스가 되고, kthreadad 프로세스는 모든 스레드의 부모 프로세스가 됩니다

 

프로세스 관련 명령어

ps : ps 명령의 옵션에 따라 자세한 프로세스 정보를 확인할 수 있습니다

  • -e : 시스템상의 모든 프로세스에 대한 정보 출력
  • -u : 사용자의 프로세스 출력
  • -l, -f :  전체 목록 출력 (PPID / NICE / PRIORITY)

top : ps 와 달리 지속적인 모니터링 기능 (작업관리자와 유사)

uptime : 부하평균만 확인

w : 부하 평균 + 현재 시스템에 접속중인 사용자의 작업내역

 

 

작업환경

shell 에서는 프로세스를 작업 (job) 단위로 관리를 합니다

작업은 포그라운드 (foreground)백그라운드 (background) 두 가지 방식으로 동작합니다

 

- 포그라운드 : 작업이 종료되는 시점까지 다른 쉘 명령어를 수행할 수 없고 대기합니다

- 백그라운드 : 작업을 하는 동시에 다른 명령어들을 실행시킬 수 있습니다

 

동시에 여러 명령어들을 실행시키는 것을 멀티 태스킹 (multi-tasking) 이라고 합니다

 

 

포그라운드 실행

이렇게 포그라운드에서 작업을 실행하면 다른 명령어를 입력해도 바로 수행되지 않고, 포그라운드 작업이 끝난 후에 수행됩니다

포그라운드에서 실행중인 작업은 ctrl + c 로 종료할 수 있습니다

 

 

백그라운드 실행

백그라운드에서 명령어를 실행하기 위해서 뒤에 & 를 붙여줍니다

백그라운드 상태에서는 바로 다른 명령어들을 실행할 수 있습니다

jobs 명령어를 통해서 백그라운드에서 실행중인 작업을 확인할 수 있습니다

[1] 은 작업의 고유 번호입니다

 

 

작업 환경 변경

- 백그라운드 -> 포그라운드 전환 : fg %[작업번호]

- 포그라운드 -> 백그라운드 전환 : ctrl + z 를 눌러서 작업 일시중단 후, bg %[작업번호]

 

사용예시

 

sleep 1000& 명령어로 백그라운드에서 실행합니다

jobs 를 통해 확인 하면  작업번호 1번으로 Running 상태입니다

 

sleep 10000 명령어를 포그라운드에서 실행하고 ctrl + z 를 통해 일시중단합니다

jobs 를 통해 확인하면 작업번호 2번에 Stopped 상태입니다

 

bg %2 명령으로 2번 작업을 Stopped 상태에서 백그라운드에서 Running 상태로 변경했습니다

 

 

ps 를 통해서 확인하면 sleep 명령어 2개가 실행중이고 PID 확인이 가능합니다

 

 

프로세스 신호 종류

신호 번호 신호 이름  설명
1 HUP 프로세스 종료 없이 구성파일 리로드
2 INT 키보드 인터럽트
3 QUIT 키보드 종료 및 덤프 생성
9 KILL 즉각적인 강제적 종료
15 TERM 정상적인 종료
18 CONT 중지된 프로세스 다시 시작
19 STOP 프로세스 동작 중지
20 TSTP 프로세스 동작 중지

 

신호 전달 명령어

 

- kill : 단일 프로세스에 PID를 이용해서 신호를 전달

   kill [SIG] [PID 또는 %JID]

 

- killall : 프로그램파일의 이름(명령어)를 이용해서 여러 프로세스를 동시에 제어

   killall [SIG] [PATTERN]

 

pkill : 이름+특성을 이용해서 여러 프로세스를 제어

 

- pgrep : pkill과 동일한 사용법으로 해당하는 PID 만 확인

 

 

kill -18 명령으로 중지된 프로세스를 다시 시작시켰습니다

 

kill -9 로 프로세스를 강제종료

 

 

프로세스의 우선순위

- priority : 실질적인 우선순위

- nice : 사용자가 조정 가능한 범위

nice 값은 top, ps 명령어를 통해 확인 가능합니다

 

nice - n [값] [COMMAND] : 명령어 실행 시 우선순위 지정

renice -n [값] [PID] : 실행 중인 프로세스의 우선순위 변경

 

nice 값은 -20 ~ 19 까지 지정 가능하고, nice 값이 낮을수록 우선순위가 높습니다

일반 user 는 0 ~ 19 까지만 지정할 수 있고, nice 값을 높일 수는 있지만 낮출 수 없습니다

반응형
Comments