본문 바로가기

대학교 2학년 1학기/리눅스 프로그래밍

프로세스 관리하기

728x90

1. 프로세스의 개념

프로세스: 현재 시스템에서 실행 중인 프로그램

- 프로세스는 부모-자식 관계를 가짐

- 부팅할 때 스케쥴러가 실행한 프로세스인 systemd(1)kthreadd(2) 프로세스를 제외한 모든 프로세스는 부모 프로세스를 가짐

- 자식 프로세스는 할 일이 끝나면 부모 프로세스에 결과를 돌려주고 종료

- 각 프로세스가 갖는 고유한 번호를 PID라고 함.

- 현재 프로세스의 개수를 알 수 있는 방법 ps -e | wc

특수한 상태의 프로세스

데몬 프로세스: 특정 서비스를 제공하기 위해 존재, 부팅 과정에서 실행 시작

고아 프로세스: 아직 실행 중인데 부모 프로세스가 먼저 종료된 자식 프로세스, 1번 프로세스가 새로운 부모 프로세스가 되어 고아 프로세스의 작업 종료 지원.

좀비 프로세스: 자식 프로세스가 실행을 종료했는데도 프로세스 테이블 목록에 남아있는 경우, 프로세스 목록에 defunct 프로세스라고 나오기도 함.

 

2. 프로세스 관리 명령

ps: 현재 실행 중인 프로세스의 정보를 출력

- 형식: ps [옵션]

프로세스의 상세 정보 출력하기 : -f옵션

- UID: 프로세스를 실행한 사용자 ID

- PID: 프로세스 번호

- PPID: 부모 프로세스 번호

- C: CPU 사용량

- STIME: 프로세스의 시작 날짜와 시간

- TTY: 프로세스가 실행된 터미널의 종류와 번호

- TIME: 프로세스 실행 시간

- CMD: 실행되고 있는 프로그램 이름(명령)

터미널에서 실행한 프로세스의 정보 출력하기: a옵션

STAT에 사용되는 문자의 의미

- R: 실행 중

- S: 인트럽트가 가능한 대기 상태

- T: 작업 제어에 의해 정지된 상태

- Z: 좀비 프로세스

- s: 세션 리더 프로세스

- +: 포그라운드 프로세스 그룹

- l: 멀티스레드

터미널에서 실행한 프로세스의 상세 정보 출력하기: au옵션

- USER: 사용자 계정 이름

- %CPU: CPU 사용량

- %MEM: 물리적 메모리 사용량

- VSZ: 사용중인 가상 메모리의 크기

- RSS: 사용 중인 물리적 메모리의 크기 (VSZ-RSS 뺀 값은 운영체제의 swap device에 있음)

- START: 프로세스 시작 시간

전체 프로세스 목록 출력하기: -e 옵션 == ax 옵션

특정 사용자의 프로세스 목록 출력하기: -u 옵션

특정 프로세스 정보 출력하기: -p 옵션

ps 명령을 이용해 특정 프로세스 정보 검색하기: ps -ef | grep bash

 

pgrep: 지정한 패턴과 일치하는 프로세스의 정보를 출력

- 형식: pgrep [옵션] 패턴 ex) pgrep -x bash (PID 출력)

pgrep 명령을 이용해 특정 프로세스 정보 검색하기: pgrep -l bash (PID와 명령이름 출력)

 

시그널

- 프로세스에 무언가 발생했음을 알리는 메시지

- 시그널 목록은 kill -l 명령으로 알 수 있음

주요 시그널

- SIGHUP: 1, 터미널과의 연결이 끊어졌을 때 발생

- SIGINT: 2, 인터럽트로 사용자가 ctrl+c를 입력하면 발생

- SIGQUIT: 3, 종료 신호로 사용자가 CTRL+ \을 입력하면 발생

- SIGKILL: 9, 이 시그널을 받은 프로세스는 무시할 수 없으며 강제로 종료됨..

- SIGALRM: 14, 알람에 의해 발생

- SIGTERM: 15, kill 명령이 보내는 기본 시그널

 

kill: 지정한 시그널을 프로세스에 보냄.

- 형식: kill [-시그널] PID

man을 실행시킨 프로세스 찾아서 종료시키기 ex) kill $(pgrep -x man)

 

 

pkill: 프로세스의 명령 이름으로 프로세스를 찾아 종료

- 형식: pkill [명령] ex) pkill man

 

top: 현재 실행 중인 프로세스에 대한 정보를 주기적으로 출력

 

3. 포그라운드, 백그라운드 프로세스와 작업 제어

포그라운드 프로세스: 입력한 명령이 실행되어 결과가 출력될 때까지 기다리며 처리되는 프로세스

백그라운드 프로세스: 명령의 처리가 끝나는 것과 관계없이 곧바로 프롬프트가 출력

- 백그라운드로 처리할 때는 주로 출력과 오류 방향을 전환하여 실행 결과와 오류 메시지를 파일로 저장

ex) find /-name passwd > pw.dat 2>&1 &

 

작업 목록 보기

jobs: 백그라운드 작업을 모두 보여줌

- 형식: jobs [%작업 번호]

작업 전환하기

- Ctrl+z 또는 stop: 포그라운드 작업을 정지

- bg [%작업번호]: 작업 번호가 지시하는 작업을 백그라운드로 전환

- fg [%작업번호]: 작업 번호가 지시하는 작업을 포그라운드로 전환

작업 종료하기

- 포그라운드 작업은 Ctrl+c를 입력하면 대부분 종료

- 백그라운드 작업은 kill 명령으로 강제 종료: PID 또는 %작업 번호

 

로그아웃 후에도 백그라운드 작업 계속 실행

nohup: 로그아웃 후에도 백그라운드 작업을 계속 실행

- 형식: nohup 명령&

ex) nohub find / -name passwd > pw.dat 2>&1 &

작업 예약하기

특정한 시간에 작업을 수행하도록 예약할 수 있는 두 가지 방법

- 정해진 시간에 한 번만 수행 -> at 기능

- 정해진 시간에 반복 수행 -> crontab 기능

at: 예약한 명령을 정해진 시간에 실행

- 형식: at [옵션] 시간

atq: 현재 사용자의 등록된 작업 목록을 보여줌.

atrm: 지정된 작업 번호의 작업을 삭제

- 형식: atrm 작업 번호

crontab: 사용자의 crontab 파일을 관리

- 형식: crontab [-u 사용자 ID] [옵션] [파일]

728x90