본문 바로가기
기록하는 중/UNIX

[Unix] 프로세스

by 성장하는 요롱이 2023. 12. 2.

 

  프로세스

  -  커널에 등록되어 관리르 받는 '실행 중인 프로그램'

  -  커널은 프로세스 관리 블록(PCB)에 프로세스에 관한 정보를 저장

  -  시스템 자원을 사용하며 여러 상태 변화를 겪음

  -  각 프로세스는 유일한 PID를 가짐

 

  프로세스 ex)

  -  systemd 프로세스는 PID가 1, 모든 사용자 프로세스의 조상 프로세스

  -  로그인을 하거나 터미널 창을 열면 'bash 프로세스'가 할당됨

  -  필요에 따라 자식 프로세스를 생성

  -  데몬 프로세스 : 서비스 요청을 처리하기 위한 백그라운드 프로세스

 

  프로세스 관리 블록(PCB)

  -  커널에 등록된 각 프로세스에 대한 정보를 저장하는 영역

  -  프로세스들은 모두 커널 공간에 자신의 정보를 가짐

  -  PCB에 저장되는 정보

     ○  PID와 PPID

     ○  UID와 EUID 및 GID와 EGID

     ○  프로세스의 현재 상태 : 실행/준비/보류/지연 등의 상태 정보와 CPU 사용 시간 등

     ○  프로세스 우선순위

     ○  프로세스가 사용 중인 자원에 관한 정보 :  메모리 주소, 입출력 장치, 파일 등

     ○  모든 대기 중인 시그널의 목록

     ○  문맥 교환 정보

 

  명령의 실행과 프로세스의 생성

  -  셸에서 명령을 실행하면 새로운 프로세스가 만들어져 처리됨

    ▷ 시스템 호출 fork()를 호출하여 기존 부모 프로세스가 자신의 복사본 자식 프로세스를 만듦

    ▷ 자식 프로세스는 시스템 호출 exec(program)에 의해 새로운 프로그램으로 대체되어 실행

    ▷  프로그램이 종료되면 자식 프로세스가 종료

    ▷ 부모 프로세스는 보류 상태에 있다가 자식 프로세스가 종료되면 깨어남

  -  ex)

    ▷  터미널 창에 ls명령 실행

    ▷  셸은 fork()를 호출하여 셸의 복사본(자식 프로세스)를 생성

    ▷  자식 프로세스는 exec(ls)를 호출하여 ls 명령을 실행

  -  pstree 명령 : 프로세스 트리(부모-자식 관계)를 보여줌

 

  포어그라운드(foreground) 프로세스

  -  셸 프롬프트에서 명령을 실행하면 포어 그라운드 모드로 수행됨

  -  터미널에 대한 제어권을 가짐

  -  키보드 입력 및 화면 출력이 가능함 : 터미널로부터 키보드 입력을 받을 수 있는 프로세스는 하나 뿐임

  -  끝나기 전에는 다른 명령을 수행 할 수 없음

  -  포어그라운드로 실행 중인 프로세스를 강제 중지하려면 Ctrl + c

  -  포어그라운드로 실행 중에 Ctrl + z하면 백그라운드로 전환되며 멈춤 또는 지연 상태가 됨

  -  fg jobId 또는 bg jobId 명령을 수행하면 실행 상태가 됨

 

  백그라운드(background) 프로세스

  -  백그라운드로 실행하려면 셸 프롬프트에서 명령끝에 &를 추가하여 실행

  -  백그라운드로 프로세스를  실행시키면 셸은 즉시 명령 대기 상태가 됨(셸 프롬프트 등장)

  -  백그라운드 프로세스는 터미날 출력은 가능하나 키보드 입력을 받을 수는 없음

  -  백그라운드프로세스가 키보드 입력이 필요하면 지연 상태가 됨

  -  입력 없이 장시간 실행되어야 하는 경우 주로 사용

  -  터미날 창을 종료하면 연결된 모든 백그라운드 프로세스도 종료됨(nohup명령하면 종료되도 백그라운드는 실행됨)

  -  백그라운드 프로세스를 포어그라운드로 전환하는 방법 : 셸에서 fg jobId을 실행함

  -  jobs 명령으로 백그라운드 프로세스의 상태를 점검할 수 있음, jobs -l명령은 PID를 함께 보여줌

 

  특수 권한 

  1)  SetUID

     -  일반 사용자가 passwd 명령으로 비밀번호를 수정하면,

        결국 /etc/passwd 또는 /etc/shadow 파일이 수정되어야 함(권한 상승이 필요함)

     -  실행 파일에 SetUID가 설정되어 있으면, 해당 파일이 실행 될 때

        '실행시킨 사용자'가 아닌 '파일의 소유자' 권한으로 실행 됨.

     -  프로세스의 EUID는 파일의 소유자가 됨.

     -  파일의 접근권한에서 소유자의 실행 권한에 x가 아닌 s가 표시됨

  $ls -l /etc/passwd
  -rw-r--r--. 1 root root 2161    8월  11  01 : 51  /etc/passwd
  $ls -l /usr/bin/passwd
  -rwsr-xr-x. 1 root root 32656   5월  15   2022  /usr/bin/passwd

     -  설정 방법은 chmod 4755 file 또는 chmod u+s file

     -  해제 방법은 chmod 0755 file 또는 chmod u-s file

 

  2)  SetGID

     -  파일의 접근권한에서 그룹의 실행 권한에 s가 표시됨

     -  SetGID가 설정된 파일을 실행하면 '실행자의 그룹 권한'이 아닌

        '파일 소유자의 그룹 권한'으로 실행됨

     -  디렉터리에 설정된 경우, 그 디렉터리에 파일을 만들 때 '파일의 소유 그룹'이

       '디렉터리 소유 그룹' 으로 지정됨. 그룹 구성원의 공유 공간으로 사용 될 수 있음

     -  설정 방법 : chmod 2775 file 또는 chmod g+s file 

 

  3)  StickyBit

     -  파일의 접근권한에서 기타 사용자의 실행 권한에 t가 표시됨

     -  주로 공유 디렉터리에 설정되며, 누구나 그 디렉터리에 파일을 생성할 수 있지만 

         파일의 소유자만 삭제할 수 있음

     -  설정 방법은 chmod 1777 file 또는 chmod o+t file

$ ls -ld /tmp
drwxrwxrwt.  18  root  root  4096  9월 11   11 : 57  /tmp

 

'기록하는 중 > UNIX' 카테고리의 다른 글

[Unix] 프로세스 관리 명령  (0) 2023.12.11
[Unix] 프로세스 상태  (0) 2023.12.11
[Unix] 파일 시스템  (0) 2023.12.02
[Unix] 볼륨  (0) 2023.12.02
[Unix] 파티션  (0) 2023.11.30