Process and Job Control

진주찬·2023년 6월 12일
0

Linux

목록 보기
7/11

Process

  • 커널은 시스템에서 실행 중인 각 프로그램을 프로세스로 간주

  • 커널은 프로세스ID(PID)로 프로세스를 식별한다.

  • 프로세스 시작
    - 시스템 부트

    • 다른 프로세스 작업에 의해
    • 유저의 행동에 의해
    • 관리자의 작업에 의해
  • 프로세스 종료
    - 일반적으로 나가기

    • 에러에 의한 자발적 종료
    • 에러에 의한 비자발적 종료
    • 유저나 프로세스의 작업으로 종료

fork()

: 새로운 프로세스(하위 프로세스) 생성

  • 자식 프로세스에 0을 리턴
  • 자식의 PID를 부모 프로세스에 리턴

int execl(char path, char arg0, char *arg1, ..., 0)
: 인수가 있는 경로에서 실행 파일을 로드하고 실행함

  • 프로세스는 프로세스 테이블의 항목으로 표시
  • PID는 프로세스 테이블 항목에서 식별하는 역할
  • 프로세스 테이블 항목 = 프로세스 제어 블록(PCB) 이라고 함

프로세스 정보

: 프로세스 상태, 메모리 영역에 대한 포인터, 현재 디렉토리, 파일 디스크립터에 대한 포인터, 수신 신호, 작업의 우선순위 계획

프로세스 구성요소

  • 주소 공간 : 메모리에 매핑
  • 코드 : 프로그램
  • 데이터 : 프로그램의 초기 데이터
  • 실행 스택, 스택 포인터 : 데이터의 현재 실행되고 있는 위치를 가리킴
  • 카운터 : 코드의 현재 실행되고 있는 위치를 가리킴

PID(Process ID)

  • 프로세스 ID : 프로세스가 실행되는 동안 프로세스에 할당 된 고유 식별자
  • 프로세스를 실행할 때마다, 다른 PID를 가진다.

PPID(Parent Process ID)

  • 부모 프로세스 : 새로운 프로세스를 생성하는 프로세스
  • 자식 프로세스 : 새롭게 생성된 프로세스
  • 부모 프로세스와 자식 프로세스는 연관되어있다.

PGID(Process Group ID)

  • 각 프로세스는 프로세스 그룹에 속함
  • 명령어가 프로세스 하나만 실행할 경우, PID와 PGID는 같음
  • 각 프로세스 그룹은 고유한 PGID가 있다.

ps 명령어

  • 주어진 시간에 시스템에서 실행 중인 프로세스의 스냅샷 제공
  • 프로세스의 대한 간략한 요약을 보여줌
  • 현재 사용자가 소유하고 터미널에 연결된 프로세스만 표시
  • 옵션
    a : 다른 사용자가 소유하고 있는 프로세스 표시
    f : 트리와 같은 형식으로 프로세스 족보 표시
    u : 사용자 이름 및 프로세스 시작 시간을 표시하는 출력 형식 사용
    w : 더 넓은 출력 형식
    x : 제어 터미널이 없는 프로세스를 포함
    -e : 모든 프로세스 정보 표시
    -l : 긴 출력 형식
    -f : 전체 출력 형식
    -C cmd : 이름이 cmd인 프로세스 표시
    -U user : user가 소유한 프로세스 표시

top 명령어

: 지속적으로 업데이트 되는 프로세스 활동을 표시

  • 사용하는 시간이 많은 프로세스를 내림차순으로 표시
  • 옵션
    -d : 대기 지연
    -i : 휴식중인 프로세스 무시
    q : 프로그램 종료
    Ctrl+l : 화면 다시 칠하기
    h : 도움말 표시
    k : pid와 신호를 요청하고 해당 신호를 해당 프로세스로 보내기
    n : 정보를 표시할 프로세스 수
    r : 프로세스의 우선순위 변경
    s : 지연 시간 변경
    M : 메모리 사용량에 따른 프로세스 정렬
    P : CPU 사용량에 따른 프로세스 정렬

동시 프로세스에 대한 제어 흐름은 시간이 지남에 따라 물리적으로 분리
두 프로세스의 흐름이 시간적으로 중복되는 경우 두 프로세스가 동시에 실행 (그렇지 않으면 순차적으로 실행)

context switching

: 제어흐름은 context switch를 통해 한 프로세스에서 다른 프로세스로 전달된다.
context switch시 커널코드는 이전 프로세스의 PCB를 저장하고 다음 프로세스의 PCB를 복원한다.

common signals

-INT(2) : 실행을 중지,Ctrl+C를 누르면 커널에서 정지시킨다.
-TERM(15) : 프로세스를 정상적으로 종료하도록 요청
-KILL(9) : 프로세스 강제 중지
-TSTP(20) : 프로세스 일시정지, Ctrl+Z
-HUP(1) : 로그아웃, 데몬에서 구성 파일을 다시 읽기 위해 사용
-CHLD(17) : 부모 프로세스에 신호를 보냄

kill 커맨드

  • 프로세스를 종료시키는데 뿐만 아니라 다양하게 쓰인다
  • 스페셜 kill : kill -9 -1 -> 죽일 수 있는 모든 프로세스를 죽인다.
  • 프로세스 그룹 킬 : kill -- -< pgid > -> 해당 pgid를 가진 모든 프로세스 종료

데몬은 일반적으로 동작에 영향을 미친다.
대부분의 데몬은 시작할 때만 구성 파일을 읽는다.

top 또는 ps-lㅇ르 보고 PRI열을 보면 현재 우선순위를 볼 수 있다.
nice를 사용하여 우선순위 변경가능

nice 커맨드

  • niceness 범위는 +19(매우 좋음)~-20(매우 나쁨)
  • 낮은 우선순위에서 우선순위 증가 : nice -n 10
  • 높은 우선순위에서 우선순위 감소 : nice -n -15

Job Control

  • 셸을 사용하여 명령 끝에 &을 통해 백그라운드에서 시작하게 한다.
  • Ctrl+Z로 일시 중지 가능
  • 일시 중단된 작업 및 백그라운드 작업에는 셸에 의해 번호가 지정된다.
  • 작업제어 명령 : jobs, fg, bg

jobs

: 활성 작업 목록과 해당 작업 번호 인쇄

  • 작업 번호 : 대괄호 안에 표시
  • %+ : 현재 작업에 대한 셸
  • %- : 현재 작업 이전의 이전 작업

fg : 백 그라운드 작업을 포그그라운드로 가져오기

  • 일시 중단된 작업을 다시 시작하여 포그라운드에서 실행
  • 인수가 없는 fg는 현재 작업에서 작동

bg : 중단된 작업을 다시 시작하여 백그라운드에서 실행, bg %1 은 백그라운드 작업번호 1번이다.

at commands

: 일회성 명령이이다.
"atq" 명령 : 보류중인 at 명령을 나열한다.
"at -c number" : 환경을 포함하여 해당 번호를 가진 명령어를 보여준다.
"atrm number" : 숫자에 맞는 명령어를 제거합니다.

cron jobs

: 정기적으로 반복하는 명령어이다.
파일에 의해 반복을 정한다.
루트 권한을 가진다.

  • /etc/cron.d
    : 이 디렉토리의 파일은 특정 형식 라인을 포함해야한다.
    (언제 명령을 실행하는지, 명령을 실행할 사용자, 실행할 명령)
    이러한 파일을 cron table 또는 crontab이라고 부른다.

  • crontab 형식
    1) 빈 줄 무시
    2) #로 시작하는 줄은 주석
    3) 환경 변수 설정 가능

  • crontab 날짜 및 시간 지정
    1) 분 : 0~59
    2) 시 : 0~23
    3) 일 : 1~31
    4) 월 : 1~12
    5) 요일 : 0~7(0과7은 일요일)
    -거의 오름차순 정렬 필드
    -필드가 일치하면 명령이 실행됨
    -별표(*)가 포함된 필드는 항상 일치한다.

  • User crontabs
    : 루트가 아닌 사용자가 cron 작업을 설정해야 할 때 사용
    "crontab"으로 조작
    "crontab -e"으로 crontab 편집
    "crontab -l"으로 crontab 표시

  • "cron"과 "at"의 권한
    /etc/cron.allow에 존재하는 사용자만 crontab을 가질 수 있다.
    /etc/cron.deny가 있는 경우에 목록에 없는 사용자도 crontab을 가질 수 있다.
    둘 다 없으면 모든 사용자가 crontab을 가질 수 있다.

0개의 댓글