[Linux 기초] 16. 프로세스 관리 및 스케줄링

Date:     Updated:

카테고리:

태그:


01. 프로세스 관리



■ ps : 프로세스의 정보 확인

ps [옵션]
옵션 설명
-a 프로세스 중에서 제어 터미널을 가지고 있는 목록 출력
-e, -A 프로세스 전체 목록 출력
-f PID, PPID 정보를 포함하여 출력
-l -f 옵션보다 자세한 정보 출력
-u 사용자 이름과 시작된 시간을 출력
-x 터미널에 종속되지 않은 프로세스 목록 출력
-U User 명시한 사용자 계정에 관련된 프로세스 정보를 보여줌
-p PID 명시한 PID에 과련된 프로세스 정보를 보여줌

545eqeqweqwe


■ pstree : 프로세스의 상관관계를 계층적으로 확인

$ pstree [옵션]
옵션 설명
-q 프로세스를 동작 시킨 명령어 까지 함께 출력
-n PID 순서대로 정렬하여 출력
-p PID 정보를 함께 출력
-U UID 정보를 함께 출력


■ top : 시스템의 운용상황/프로세스 상태를 실시간으로 모니터링

  • 【요약 영역】

    ㅇㅁㅇㅁㄴㅇㅁㄴㅇ

    eqwewqe2131321

  • 【디테일 영역】

    w1esad1313sdead

    영역 설명
    PID 프로세스 ID이며 프로세스를 구분하기 위한 고유한 값
    USER 해당 프로세스를 실행한 사용자명
    PR & NI ㆍ커널에 의해서 스케줄링되는 우선순위
    ㆍPR에 영향을 주는 nice라는 값
    VIRT 프로세스가 소비하고 있는 총 메모리
    RES RAM에서 사용중인 메모리의 크기
    SHR 다른 프로세스와의 공유메모리(Shared Memory)를 나타냄
    %MEM RAM에서 RES가 차지하는 비율을 나타냄
    S 프로세스의 현재 상태를 나타냄
    TIME+ 프로세스가 사용한 토탈 CPU 시간
    COMMAND 해당 프로세스를 실행한 커맨드
  • 【옵션】

     $ top [옵션]
    
    옵션 설명
    -a 작업의 실제 물리적 메모리 사용량으로 정렬한다.
    -c 작업의 CPU 사용량으로 정렬한다.
    -d Interval top 명령 정보가 갱신되는 시간 간격. 초단위. 기본값 3초.(Interval time)
    -p PID 특정 PID에 대한 프로세스 정보를 출력한다. 여러 PID를 선택해야 할 경우 -p PID1,PID2,PID3
    -u USERNAME 특정 사용자에 관련된 프로세스 정보를 출력한다.
    상호 대화형 명령 (키) 설명
    s 정보 갱신 시간 간격을 재조정 (Interval time)
    B 글자 굵기 변경
    n 보여지는 최대 작업 수를 재조정 (Maxmum Tasks)
    m 메모리/스왑 정보 보기 토클링
    1 다중프로세스 (SMP) 보기 토클링
    | 평균 로드 보기 토글링
    t Tasks와 CPU 보기 토글링
    u 특정 사용자에 관련된 프로세스 정보를 출력한다.
    k 특정 PID를 가지는 프로세스에게 kill 시그널을 전달한다. 기본 시그널:15 Terminate
    r renice 명령으로 프로세스 우선순위를 조정한다.
    f 출력될 필드를 설정하기 위해 사용한다.
    o 출력 정렬 우선순위를 설정하기 위해 사용한다.
    z 색있는 출력을 한다.
    Shift + P CPU 사용량 순으로 정렬한다.
    Shift + M 메모리 사용량 순으로 정렬한다.
    Shift + T CPU를 사용 시간 순으로 정렬한다.
    q top 명령을 종료한다.


■ signal

  • 동작 중인 프로세스에게 전달하는 메시지의 의미를 가지며, 각 메시지마다 프로세스가 수행할 동작이 정의 되어 있다.

  • 【signal 종류 확인】

      $ kill -l
    
    종류 설명
    SIGHUP(1) 프로세스 실행
    SIGINT(2) 키보드 “ctrl +c(인터럽트)” 기능 수행 → 프로세스 종료
    SIGKILL(9) 커널을 통해 직접적으로 프로세스를 종료(강제 종료) → 프로세스가 사용 중이던 데이터를 기록하지 않음
    SIGTERM(15) 프로세스를 통해 정상 종료 → 저장 할 데이터가 있을 경우 저장 후 종료


■ kill : 프로세스 종료

$ kill [-signal] [PID]


■ pkill : 프로세스 종료

  • 프로세스의 이름을 이용하여 종료할 프로세스를 지정 함

  • 같인 이름으로 동작 중인 프로세스를 동시에 제어할 수 있음

  • 【pkill : 프로세스 종료】

      $ pkill [-signal] [옵션] [프로세스 이름 또는 패턴]
    
    옵션 설명
    -f 지정한 패턴을 명령어, 경로, 옵션, 인자에서도 검색
    -n 패턴과 일치하는 프로세스 중에서 가장 최근에 실행된 하나만 종료
    -x 패턴과 정확하게 일치되는 프로세스만 종료


■ killall : 같은 데몬의 여러 프로세스를 한 번에 종료


02. 프로세스 우선순위 관리



■ 프로세스 우선순위

  • 여러 개의 프로세스는 CPU를 사용하기 위해 경쟁 하지만 모든 프로세스가 동일한 동작을 하는 것이 아니므로 공평하게 자원을 배분 받지 못 함

  • 프로세스의 중요도에 따라 빨리 처리가 되어야 하는 경우 우선순위가 높아지며, 백업, 업데이트, 용량이 큰 프로그램을 다운받을 경우 백그라운드로 동작 시키면서 우선순위를 조정 함


■ PRI(priority)

  • 운영체제에서 참고하는 우선순위 값으로 낮을 수록 우선순위가 높다. (범위 0~139)

  • 인위적인 조작이 되지 않고, 시스템이 상황에 따라 적절히 부여된다.


■ NI(nice)

  • 사용자가 조작하는 우선순위 값으로 낮을 수록 우선순위가 높다. (범위 -20~19)

  • 프로세스 우선순위 확인 : ps -el


■ nice : 프로그램을 실행하면 우선순위(nicer값)를 변경

$ nice -n [우선순위 값] [프로그램 이름 또는 PID]

$ nice -[우선순위 값] [프로그램 이름 또는 PID]


■ renice : 실행중인 프로그램의 우선 순위(nice 값)를 변경

$ snice +/- [우선순위 값] [프로그램 이름 또는 PID]


03. 프로세스 실행 관리



■ JOB - 터미널에 의해서 제어되는 프로세스

  • 모든 job은 shell에 의해서 작업번호를 부여 받음

  • 【jobs - 백그라운드로 실행되고 있는 작업번호 목록 확인】

      $ jobs
    


■ 포그라운드(foreground)

  • 일반적으로 프로그램이 실행되는 방식

  • 명령이 실행시킨 프로그램 앞에서 실행되는 방식

  • 【fg - 백그라운드로 동작중인 프로세스를 포그라운드로 전환】

      $ fg <작업 번호>
    


■ 백그라운드(background)

  • 명령이 실행시킨 프로그램 뒤에서 실행되는 방식

  • 장시간 동작해야 하는 프로그램은 대부분 백그라운드 방식으로 동작 시킴

  • 백그라운드 프로세스는 kill을 사용하여 종료 함

  • 【백그라운드로 실행 - 명령어 입력 뒤에 “&”를 붙여서 실행】

      $ firefox &
    
  • 【bg - 포그라운드로 동작중인 프로세스를 백그라운드로 전환】

      $ bg <작업 번호>
    


■ nohup 명령

  • 로그아웃 후에도 프로세스의 동작을 유지해야 하는 경우 사용되며, 대표적으로 백업, 많은 양의 파일을 tar로 압축, wget이나 ftp로 큰 용량의 파일의 다운로드 할 때 사용된다.

      $ nohup <실행 명령어>
    


04. 프로세스 스케줄링



■ at : 한번만 프로세스를 실행

  • /etc/at.allow 파일이 존재하는 경우 /etc/at.deny 파일 존재 유무에 상관없이 /etc/at.allow 파일에 등록된 사용자만 가능

  • /etc/at.deny 파일만 존재하는 경우 /etc/.deny 파일에 등록된 사용자만 사용 불가

  • 【at】

      $ at [옵션] 시간
    
    옵션 설명
    -q 작업의 대기 큐 지정
    -c 작업 정보 출력
    -d 예약한 작업 삭제
    -l 큐에 있는 작업 출력
    -m 실행한 결과 메일
    -f 지정한 파일로부터 작업 읽어옴


■ crontab : 주기적으로 프로세스를 실행

  • 관리자가 원하는 작업을 예약해 두고 정해진 시간에 주기적으로 반복하여 실행할 수 있어 주기적인 서버의 백업이나 로그를 관리할 때 유용하다.

  • /var/log/cron 파일을 통해 cron 데몬의 로그를 확인할 수 있고, /var/spool/cron/ 디렉터리 밑에 각 사용자의 사용자명과 같은 이름으로 생성된다.

  • 【확인】

      $ ps -ef | grep crond
    
      $ cat /var/log/cron
    
  • 【crontab - 주기적으로 프로세스를 실행】

    • /etc/cron.allow, /etc/cron.deny 파일도 at과 같은 원리로 제한이 동작함
      $ crontab [옵션]
    
    옵션 설명
    -u 예약 작업 실행 계정
    -l 예약 작업 목록 확인
    -r 예약 작업 취소
    -e 예약 작업 등록

    22313132


LINUX 카테고리 내 다른 글 보러가기

댓글 남기기