이것이 점프 투 공작소

리눅스의 프로세스 개요 본문

리눅스

리눅스의 프로세스 개요

겅겅겅 2022. 10. 7. 21:30

프로세스란?

커널에 등록되어 관리를 받는 작업 또는 프로그램
커널은 PCB에 프로세스에 관한 정보를 저장 
프로세스는 식별을 위해 PID를 가짐

 

PCB가 뭐죠? (프로세스 관리 블록)

모든 프로세스들은 커널 공간에 자신의 정보를 가지게 됩니다. 

PCB에 저장되는 정보들은 다음과 같습니다.

  • PID와 PPID (프로세스 부모 PID)
  • UID(프로세스를 실행시킨 유저ID)와 EUID(프로세스를 실행시킨 유효 유저ID)
  • GID(프로세스를 실행시킨 그룹ID)와 EGID(프로세스를 실행시킨 유효 그룹ID)
  • 프로세스의 현재 상태 (실행/준비/보류/지연/CPU사용시간)
  • 프로세스 우선순위 (우선순위가 높으면 CPU를 할당받아 사용할 기회를 가진다)
  • 프로세스가 사용중인 자원 정보 (메모리 주소, 입출력 장치, 파일)
  • 대기중인 시그널 목록
  • 문맥 교환정보 (프로세스가 중단되었다가 시작될 때 필요한 CPU레지스터의 내용)

 

프로세스의 생성

fork()  -> exec()

부모 프로세스가 자신의 복사본 프로세스를 생성, 커널에 요청(시스템 호출)하여 생성합니다.

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

자식 프로세스가 종료되면 중지되어 있던 부모 프로세스가 깨어나게됩니다, 즉 부모 프로세스는 자식 프로세스의 상태를 가지고 있습니다.

 

포그라운드 백그라운드와 프로세스

포그라운드 프로세스

  1. 터미넬에 대한 제어권을 가지는 프로세스
  2. 키보드 입력 및 화면 출력이 가능 (터미널로부터 입력을 받을 수 있는 프로세스는 하나 뿐)
  3. 실행중인 포그라운드 프로세스에서 ctrl + z 는 백그라운드로 전환, ctrl + c는 중지
  4. fg jobId 또는 bg jobId 명령으로 실행상태로 변경 가능

백그라운드 프로세스

  1. 쉘에서 명령의 끝에 &를 추가하면 백그라운드로 실행 -> 쉘은 명령 대기 상태가 됨
  2. 터미널 출력은 가능하나 키보드 입력은 받을 수 없음
  3. 터미널 창을 종료하면 모든 백그라운드 프로세스도 종료됨
  4. fg jobId로 백그라운드 -> 포그라운드 전환가능

프로세스 확인 명령어 : jobs -l 명령어로 프로세스의 상태 점검 및 PID확인 가능

 

특수권한

SetUID란?

상단의 스크린샷을 보면 ls -l /usr/bin/passwd명령어 passwd실행파일 접근 권한에 s를 볼 수 있는데 uidset이 된 파일입니다.

이 의미는 이 프로세스가 실행 될 때 실행자가 아닌 파일의 소유가 root로써 실행시키게 됩니다. 즉 권한을 상승시켜 프로세스를 실행 시킬 수 있게됩니다.

 SetUID 설정, 해제법

설정법 : chmod 4775 file 또는  chmod u+s file

해제법 : chmod 0775 file 또는 chmod u-s file

 

SetGID란?

파일 소유자의 그룹 권한으로 실행 시킬 수 있게 됩니다.

디렉토리에 설정된 경우 그 디렉토리에 파일을 만들 때 파일의 소유그룹이 디렉토리의 소유그룹으로 지정됩니다.

실행파일 및 디렉토리에 적용 가능합니다.

 SetGID 설정법 (해제법은 -)

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

 

StickyBit

파일의 접근 권한에서 기타 사용자 권한에 t가 표시됩니다.

주로 공유 디렉토리에 설정되며, 누구나 그 디렉토리에 파일을 생성 할 수 있지만 파일 소유자만 삭제 할 수 있습니다.

 

StickyBit 설정법  (해제법은 -)

설정법 : chmod 1775 file 또는  chmod o+s file