프로세스
- 커널에 등록되어 관리르 받는 '실행 중인 프로그램'
- 커널은 프로세스 관리 블록(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 |