1. 프로세스
1) 프로세스(process)
실행 중인 프로그램
- 각 프로세스는 유일한 프로세스 번호 PID를 갖는다.
- 각 프로세스는 부모 프로세스에 의해 생성된다.
2) 프로세스 상태 보기 : ps(process status)
- 사용법
$ ps [-옵션]
현재 시스템 내에 존재하는 프로세스들의 실행 상태를 요약해서 출력한다.
*
%CPU : CPU 사용률
%MEM : 메모리 점유율
VSZ : 가상 메모리 영역의 크기 / RSS : 물리 메모리 영역의 크기
STAT : 프로세스의 현재 상태
ㄴ R : 실행 대기 / S : 수면 상태 / D : 입출력을 기다리는 상태 / T : 멈춰 있거나 흔적이 남아 있는 상태 /
Z : 완전히 죽은 상태 / N : 우선순위가 낮은 프로세스 / < : 우선순위가 높은 프로세스 / I : idle 상태
START : 프로세스가 시작된 시간
TIME : 프로세스의 총 사용 시간(CPU를 사용한 시간)
COMMAND : 프로세스를 실행한 명령행
$ ps
$ ps u (나의 프로세스 정보)
$ ps aux(시스템 내의 모든 프로세스에 대한 정보)
항목 | 의미 |
UID | 프로세스를 실행시킨 사용자 ID |
PID | 프로세스 번호 |
PPID | 부모 프로세스 번호 |
C | 프로세스의 우선 순위 |
STIME | 프로세스의 시작 시간 |
TTY | 명령어가 시작된 터미널 |
TIME | 프로세스에 사용된 CPU 시간 |
CMD | 실행되고 있는 명령어(프로그램) 이름 |
2) 특정 프로세스 리스트 : pgrep
- 특정 프로세스만 리스트
$ ps -ef | grep -w sshd
- 사용법
$ pgrep [옵션][패턴]
패턴에 해당하는 프로세스들만을 리스트한다.
-l : PID와 함께 프로세스의 이름을 출력한다.
-f : 명령어의 경로도 출력한다.
-n : 패턴과 일치하는 프로세스들 중에서 가장 최근 프로세스만을 출력한다.
-x : 패턴과 정확하게 일치되는 프로세스만 출력한다.
2. 작업 제어
1) 쉘과 프로세스
2) 쉘 재우기
- 사용법
$ sleep 초
명시된 시간만큼 프로세스 실행을 중지시킨다.
3) 강제 종료
- 강제 종료 Ctrl-C
- 실행 중지 Ctrl-Z
4) 후면 작업의 전면 전환 : fg(foreground)
- $ fg %작업번호
5) 전면 작업의 후면 전환 : bg(background)
- 사용법
Ctrl-Z 키를 눌러 전면 실행 중인 작업을 먼저 중지시킨 후 bg 명령어를 사용하여 후면 작업으로 전환
- $ bg %작업번호
작업번호에 해당하는 중지된 작업을 후면 작업으로 전환하여 실행한다.
6) 후면 작업의 입출력 제어
- 후면 프로세스 출력
모니터에 출력한 것은 전면 프로세스의 출력과 뒤섞인다.
출력 재지정 이용
- 후면 프로세스 입력
키보드로부터 모든 입력은 전면 프로세스가 받기 때문에 후면 프로세스는 키보드로부터 입력을 받을 수 없다.
입력 재지정 이용
3. 프로세스 제어
1) 프로세스 끝내기 : kill
- 프로세스 강제 종료
$ kill 프로세스 번호
$ kill %작업번호
프로세스 번호(혹은 작업 번호)에 해당하는 프로세스를 강제로 종료시킨다.
2) 프로세스 기다리기 : wait
- 사용법
$ wait [프로세스 번호]
프로세스 번호로 지정한 자식 프로세스가 종료될 때까지 기다린다.
프로세스 번호를 지정하지 않으면 모든 자식 프로세스가 끝나기를 기다린다.
3) 프로세스 우선 순위
- 실행 우선 순위 nice 값
19(제일 낮음) ~ -20(제일 높음)
- nice 명령어
$ nice [-n 조정수치] 명령어 [인수들]
주어진 명령을 조정된 우선 순위로 실행한다.
ex) $ nice -n 10 ps -ef
ps -ef 명령을 10이라는 조정된 우선 순위로 실행.
4) 프로세스 우선 순위 조정
- 사용법
$ renice [-n] 우선 순위 [-gpu] PID
이미 수행 중인 프로세스의 우선 순위를 명시된 우선 순위로 변경한다.
-g : 해당 그룹명 소유로 된 프로세스를 의미한다.
-u : 지정한 사용자명의 소유로 된 프로세스를 의미한ㄷ.
-p : 해당 프로세스의 PID를 지정한다.
4. 프로세스의 사용자 ID
1) 프로세스의 사용자 ID
- 프로세스는 프로세스 ID 외에 프로세스를 실행시킨 사용자의 ID와 사용자의 그룹 ID를 갖는다.
이는 프로세스가 수행할 수 있는 연산을 결정하는 데 사용된다.
- id 명령어
$ id [사용자명]
사용자의 실제 ID와 유효 사용자 ID. 그룹 ID 등을 보여준다.
- 프로세스의 실제 사용자 ID(real user ID)
그 프로세스를 실행한 원래 사용자의 사용자 ID로 설정된다.
ex) change라는 사용자 ID로 로그인하여 프로그램을 실행시키면 그 프로세스의 실제 사용자 ID는 change가 된다.
- 프로세스의 유효 사용자 ID(effective user ID)
현재 유효한 사용자 ID. 보통 유효 사용자 ID와 실제 사용자 ID는 같다.
특정 실행파일(2), 3))을 실행할 때 유효 사용자 ID는 달라진다.
새로 파일을 만들 때나 파일 접근 권한을 검사할 때 주로 사용된다.
2) set-user-id 실행파일
- set-user-id(set user ID upon execution) 실행 권한
set-user-id가 설정된 실행파일을 실행하면 이 프로세스 유효 사용자 ID는 그 실행파일의 소유자로 바뀌고,
이 프로세스가 실행되는 동안 그 파일의 소유자 권한을 갖게 된다.
3) set-group-id 실행파일
- set-group-id(set group ID upon execution) 실행 권한
실행파일이 실행되는 동안 그 파일 소유자의 그룹을 프로세스의 유효 그룹 ID로 갖게 된다.
set-group-id 실행 권한은 8진수 모드로는 2000으로 표현된다.
4) set-user-id / set-group-id 설정
- $ chmod 옵션 (8진법 수) 파일
8진법 수의 맨 앞자리가 4 : set user ID
2 : set group ID
6 : set user, group ID
* set-user-id 실행 권한 설정
$ chmod 4755 test : test 파일의 사용자 ID 설정을 지정하고, user에게 rwx 권한 부여,
group과 other에게 r-x 권한을 부여한다.
* set-group-id 실행 권한 설정
$ chmod 2777 test : test 파일의 그룹 ID 설정을 지정하고, user, group, other의 권한을 모두 rwx로 변경한다.
- $ chmod u+s 파일 : set-user-id 실행 권한 설정
$ cmmod g+s 파일 : set-group-id 실행 권한 설정
5. 시그널과 프로세스
1) 시그널
- 시그널은 예기치 않은 사건이 발생할 때 이를 알리는 소프트웨어 인터럽트이다.
- 시그널 발생 예
SIGFPE : 부동소수점 오류
SIGPWR : 정전
SIGALRM : 알람시계 울림
SIGCHLD : 자식 프로세스 종료
SIGINT : 키보드로부터 종료 요청 (Ctrl-C)
SIGSTP : 키보드로부터 정지 요청 (Ctrl-Z)
2) 주요 시그널
3) 시그널 보내기 : kill 명령어
- kill 명령어
한 프로세스가 다른 프로세스를 제어하기 위해 특정 프로세스에 임의의 시그널을 강제적으로 보낸다.
- 사용법
$ kill [-시그널] 프로세스 번호
$ kill [-시그널] %작업번호
프로세스 번호(혹은 작업 번호)로 지정된 프로세스에 원하는 시그널을 보낸다.
시그널을 명시하지 않으면 SIGTERM 시그널을 보내 해당 프로세스를 강제 종료한다.
'Linux' 카테고리의 다른 글
리눅스 스터디 6주차 (0) | 2020.12.31 |
---|---|
리눅스 스터디 5주차 (0) | 2020.12.25 |
리눅스 스터디 3주차 (0) | 2020.09.28 |
리눅스 스터디 2주차 (0) | 2020.09.20 |
리눅스 스터디 1주차 (0) | 2020.09.08 |