Computer Science/OS

[OS] 리눅스 / 프로세스, 스케줄링

Bay Im 2024. 9. 4. 01:28
  • 프로세스
    • 실행 중인 프로그램은 프로세서라고 한다
    • 실행시 번호(PID)가 할당되어 관리된다
    • 입력없이 실행 되는 Background 프로세스
    • 명령 입력 후 수행 종료까지 기다려야하는 Foreground 프로세스가 있다
  • 프로세스 생성
    • fork
      • 메모리 할당 후 복사본 형태의 프로세스 실행
      • 기존 프로세스는 그대로 실행된다
    • exec
      • 원래 프로세스를 새로운 프로세스로 대체하는 형태
      • 호출한 프로세스 메모리에 새로운 프로세스의 코드를 덮어쓴다
    • 리눅스 부팅시 커널이 init 프로세스를 발생시키고 PID 1번을 할당한다
  • 프로세스 종류
    • Foreground
      • 종료까지 기다리는 프로세스
    • Background
      • 뒤에서 실행
      • 포어그라운드 실행 명령어 뒤에 & 를 추가하여 실행한다
      • 다중 작업에 유용하다
  • 작업 전환
    • 포어→ 백
      • ctrl + Z로 대기 상태 후 bg 입력
    • 백→ 포어
      • fg %작업번호 입력
      • 작업번호는 jobs 명령어로 확인
  • 시그널
    • 프로세스끼리 서로 통신할 때 사용한다
    • 특정 프로세스가 다른 프로세스에게 메시지를 보낼 때 시그널을 이용한다
    • 종류
      • 1번 SIGHUP: 재시작
      • 2번 SIGINT: 시그널 실행 중지 (CTRL + C 다시 실행)
      • 3번 SIGQUIT: 시그널 실행 중지 (CTRL + | 다시 실행)
      • 9번 SIGKILL: 강제 종료
      • 15번 SIGTERM: 정상종료
      • 18번 SIGCONT: SIGSTOP 정지된 것 다시 실행
      • 19번 SIGSTOP: 정지 시그널
      • 20번 SIGTSTP: 실행중지 (CTRL + Z 다시 실행)
  • 데몬
    • 계속 실행되는 프로세스 (백그라운드 실행)
    • 서버 역할 프로그램들이 이에 해당
    • 이름 뒤에 d를 붙인다
  • 데몬 실행 방법
    • standalone 방식
      • 부팅시 실행
      • 메모리에 계속 상주하여 클라이언트 요청 처리 (웹, 메일 등)
    • inet 방식
      • 클라이언트 요청시 프로세스 실행
      • 종료 후 자동 종료
      • 커널 2.4부터 inetd→ xinetd가 수행

 

프로세스 명령어

  • ps (process status)
    • 동작 중인 프로세스 상태 출력
    • 작업 중인 셸 확인
    • ps aux: 소유자 정보도 함께 출력
    • 옵션
      • USER: BSD 계열 프로세스 사용자 이름
      • VSZ: 가상 메모리 사용량 (K, 페이지 단위)
      • RSS: 실제 메모리 사용량
      • TTY: 프로세스와 연결된 터미널
      • STAT: 현재 프로세스 상태
      • TIME: CPU 사용 시간
      • PPID: 부모 프로세스의 PID
      • PID: 프로세스 식별번호
      • PRI: 우선 순위
    • STAT의 주요값
      • R: 실행 중 혹은 실행될 수 있는 상태
      • S: SLEEP, 기다리는 상태
      • D: 디스크에 의해 대기 상태
      • T: 정지된 상태
      • Z: 종료되었는데 미회수되어 메모리 차지하는 좀비상태
  • pstree
    • 프로세스의 상태를 트리구조로 출력
    • 옵션
      • -a: 명령행 인자까지 출력
      • -h: 현재와 조상 프로세서를 하이라이트로 강조하여 출력
  • top
    • 동작 중인 프로세스 상태를 실시간으로 화면에 출력 (CPU, 메모리, 부하상태)
  • kill
    • 프로세스에 시그널을 보내며 옵션없이 실행시 종료 신호 (15, SIGTERM) 를 보낸다
    • 중지시킬 수 없는 프로세스 종료시 사용
    • kill 명령어에 PID 작성하여 종료
    • 예시
      • kill -l: 시그널 종류 출력
      • kill -9 PID: 해당 PID 프로세스 강제 종료
        • kill -KILL PID, kill -SIGKILL PID 도 가능
      • kill -HUP PID: 해당 PID 프로세스 재시작
      • kill %2: 작업번호가 2인 프로세스 종료
      • kill -s SIGTERM PID: 해당 PID 프로세스 기본 종료
  • killall
    • 같은 데몬의 여러 프로세스를 한번에 종료
    • 이건 PID 미사용! 프로세스명을 사용한다
    • 예시
      • killall httpd: httpd 모두 종료
      • killall -HUP httpd: 다시 실행
      • killall -v -9 httpd: 모두 종료
      • service httpd stop: 모두 종료
  • nice
    • 프로세스 우선 순위 변경
    • NI(우선순위)의 기본 값은 0
    • 범위는 -20~19
    • 일반 사용자는 NI값 증가만 가능
    • root만 NI 감소 (순위가 높아진다는 것)
    • 예시
      • nice -10 bash
        • 순위 낮춤, -는 대쉬지 마이너스가 아님
        • 순위 높이려면 —10
  • renice
    • 실행 중인 프로세스 우선순위 변경
    • PID, 사용자이름, 그룹ID 이용
    • nice는 기존꺼 증감이라면, renice는 바로 설정 (즉시 부여)
    • root만 NI 값 낮춰서 순위 높일 수 있다
    • NI 범위는 -20~19
    • renice가 -10
  • nohup
    • 로그아웃하거나 작업 중인 터미널이 닫혀도 실행 중인 프로세스를 백그라운드로 작업되게 해주는 명령
    • 명령행 뒤에 & 명시
  • 스케줄링
    • 특정 시간에 특정 작업을 수행하는 것
    • at과 cron을 사용하며 at은 한번만 실행, cron은 주기적인 프로세스
    • cron
      • 시스템 운영에 필요한 작업은 root 권한으로 /etc/crontab에 등록해서 사용자는 crontab 명령 수행
    • crontab 관련 명령
      • crontab -l: 설정된 crontab 내용 출력
      • crontab -e: crontab 내용 작성 및 수정
      • crontab -r: 내용 삭제
      • crontab -u: root가 특정 사용자의 crontab 파일을 다룰 때 사용
        • ex) crontab -e -u 사용자명: 해당 사용자의 crontab 수정
    • crontab 설정
      • 일요일은 0 혹은 7
      • 월~금은 1~6
      • *(분) *(시간) *(날짜) *(달) *(요일)
      • 예시
        • 1-12/2 는 1~12개월까지 2개월 마다 라는 뜻
        • 1, 3, 5는 월, 수, 금
728x90