Chapter 06 프로세스
1. 프로세스
1) 프로세스
- 개념 : 프로세스는 실행중인 프로그램을 의미한다.
- 특징
- 각 프로세스는 프로세스 id를 갖는다
- 각 프로세스는 부모 프로세스에 의해 생성된다.
2) 프로세스 리스트
$ ps [-옵션]
현재 시스템 내에 존재하는 프로세스들의 실행상태를 요약해서 출력한다.
- f 옵션 : 사용자 프로세스에 대한 보다 자세한 정보 보여줌
- a 옵션 : 모든 사용자의 프로세스를 출력
- u 옵션 : 프로세스에 대한 좀 더 자세한 정보 출력
- x 옵션 : 더 이상 제어 터미널을 갖지 않는 프로세스들도 함께 출력
- e 옵션 : 현재 시스템 내에 실행 중인 모든 사용자 프로세스 정보를 출력
* 보통 -aux , -ef 많이 씀
- ps 출력정보
항목 | 의미 |
UID | 프로세스를 실행시킨 사용자 ID |
PID | 프로세스 번호 |
PPID | 부모 프로세스 번호 |
C | 프로세스 우선순위 |
STIME | 프로세스 시작 시간 |
TTY | 명령어가 시작된 터미널 |
TIME | 프로세스에 사용된 CPU 시간 |
CMD | 실행되고 있는 명령어 이름 |
3) 특정 프로세스 리스트
$ pgrep [옵션] [패턴]
패턴에 해당하는 프로세스들만을 리스트한다
-l : PID와 함께 프로세스 이름 출력
-f : 명령어의 경로도 출력
-n : 가장 최근 프로세스만 출력
-x : 패턴과 정확하게 일치하는 프로세스만 출력
2. 작업 제어
1) 쉘과 프로세스
- 쉘의 명령어 처리 과정
① 프롬프트를 내고 명령어를 입력받는다
② 자식 프로세스를 생성한다.
③ 자식 프로세스에게 명령어를 실행시킨다.
2) 쉘 재우기
$ sleep 초
명시된 시간만큼 쉘의 실행을 중지시킨다.
3) 강제 종료
$ 명령어
^C
4) 실행 중지
$ 명령어
^Z
5) 후면작업의 전면 전환
$ fg %작업번호
중지된 작업을 다시 전면에서 실행시킨다.
6) 전면 작업의 후면 전환
$ bg %작업번호
7) 입출력 제어
- 후면 프로세스가 입력을 받으려면 입력 재지정을 이용해서 파일로부터 입력을 받아야 한다.
3. 프로세스 제어
1) 프로세스 끝내기
$ kill 프로세스 번호
$ kill %작업 번호
2) 프로세스 기다리기
$ wait [프로세스번호]
프로세스 번호로 지정한 자식 프로세스가 종료될 때까지 쉘을 기다리게 한다.
3) 프로세스 우선순위
- 실행 우선순위 nice 값 : 19(제일낮음) ~ -20(제일높음)
$ nice [-n 조정수치] 명령어 [인수들]
주어진 명령을 조정된 우선순위로 실행한다.
$ renice [-n] 우선순위 [-gpu] PID
이미 수행중인 프로세스의 우선순위를 명시된 우선순위로 변경한다.
-g : 해당 그룹명 소유로 된 프로세스를 의미한다.
-u : 지정한 사용자명의 소유로 된 프로세를 의미한다.
-p : 해당 프로세스의 pid를 지정한다.
4. 프로세스 사용자 id
- 프로세스는 프로세스 ID외에 사용자 ID와 그룹 ID를 갖는다.
$ id [사용자명]
사용자의 실제 사용자 ID와 유효 사용자 ID, 그룹 ID 등을 보여준다.
1) 실제 사용자 ID와 유효 사용자 ID
- 실제 사용자 ID : 그 프로세스를 실행시킨 사용자의 사용자 ID
- 유효 사용자 ID : 프로세스의 현재 유효한 사용자 ID(특별한 실행파일을 실행할 때를 제외하고 동일)
2) set-user-id와 set-group-id
① set-user-id 실행권한
- 설정된 실행파일을 실행하면 프로세스의 유효 사용자 id는 그 실행파일의 소유자로 바뀜
- 이 프로세스는 실행되는 동안 그 파일의 소유자 권한을 갖게됨
② set-group-id 실행권한
- 실행되는 동안에 그 파일 소유자의 그룹을 프로세스의 유효 그룹id로 갖게된다.
* chmod로 실행권한 설정 가능
5. 시그널과 프로세스
1. 시그널
1) 개념 : 예기치 않은 사건이 발생할 때 이를 알리는 소프트웨어 인터럽트이다.
ex) 부동소수점 오류(SIGFPE), 알람시계울림(SIGALARM), 자식 프로세스 종료(SIGCHLD)등
2. 시그널 종류
- 약 30여개 주요 시그널이 /usr/include/signal.h 에정의되어 있다.
- 시그널 이름은 SIG로 시작됨, 별도로 처리하지 않으면 기본동작에 따라 자동으로 처리된다.
3. 시그널 보내기
$ kill [-시그널] 프로세스 번호
$ kill [-시그널] %작업번호
프로세스 번호로 지정된 프로세스에 원하는 시그널을 보낸다.
시그널을 명시하지 않으면 sigterm시그널을 봬 해당 프로세스를 강제 종료시킨다.
<연습 문제>
6.1
③ 후면 처리는 쉘이 명령어 실행이 끝나기를 기다린다.
6.2
시그널
6.3
kill
6.4
전면처리는 쉘이 명령어 실행이 끝날 때까지 기다리지만, 후면처리는 기다리지 않고 후면에서 실행된다.
후면 처리가 필요한 이유는 프로세스의 병렬작업을 위해서 이다.
6.5
ps -ef | grep 사용자 이름
6.6
bg %작업번호
6.7
fg %작업번호
6.8
1) 실제 사용자 id : 그 프로세스를 실행시킨 사용자의 사용자 id
2) 유효 사용자 id : 프로세스의 현재 유효한 사용자 id
3) 실제 그룹 id : 그 프로세스를 실행시킨 사용자의 그룹 id
4) 유효 그룹 id : 프로세스의 현재 유효한 사용자의 그룹 id
6.9
1) 프로세스 id : 프로세스 자신만의 고유 번호
2) 부모 프로세스 id : 다른 프로세스를 만드는 프로세스의 id
3) 프로세스 그룹 id : 프로세스를 실행시킨 사용자의 그룹 id
6.10
kill명령어와 함께 해당 프로세스를 종료시키는 시그널로 쓰인다.
'Major > Linux' 카테고리의 다른 글
[리눅스 시스템 원리와 실제] 13장 개념/연습문제 (0) | 2021.12.02 |
---|---|
[리눅스 시스템 원리와 실제] 5장 개념/연습문제 (4) | 2021.10.15 |
[리눅스 시스템 원리와 실제] 4장 개념/연습문제 (0) | 2021.10.14 |
[리눅스 시스템 원리와 실제] 3장 개념/연습문제 (0) | 2021.10.13 |
[리눅스 시스템 원리와 실제] 1장 개념/연습문제 (0) | 2021.10.09 |