교재 : 리눅스 시스템 원리와 실제 (창병모, 생능출판)
6.1 프로세스
1) 프로세스 (process)
- 실행 중인 프로그램
- 프로세스 번호 : 각 프로세스는 유일한 프로세스 번호 PID를 갖는다.
- 부모 프로세스 : 각 프로세스는 부모 프로세스에 의해 생성된다.
- 프로세스의 종류
- 시스템 프로세스
- 시스템 운영에 필요한 기능을 수행하는 프로세스
- 어떤 서비스를 위해 부팅 시 생성되는 데몬 프로세스
- 사용자 프로세스
- 사용자의 명령 혹은 프로그램을 실행시키기 위해 생성된 프로세스
2) 프로세스 상태 보기 : ps (process status)
$ ps [-옵션]
: 현재 시스템 내에 존재하는 프로세스들의 실행 상태를 요약해서 출력함.
- ps 출력 정보
- UID : 프로세스를 실행시킨 사용자 ID
- PID : 프로세스 번호
- PPID : 부모 프로세스 번호
- C : 프로세스 우선순위
- STIME : 프로세스의 시작 시간
- TTY : 명령어가 시작된 터미널
- TIME : 프로세스에 사용된 CPU 시간
- CMD : 실행되고 있는 명령어(프로그램) 이름
3) 특정 프로세스 리스트 : pgrep
- 사용법 : 패턴에 해당되는 프로세스들만을 리스트한다.
$ pgrep [옵션] [패턴]
- -l : PID와 함께 프로세스의 이름을 출력한다.
- -f : 명령어의 경로도 출력한다.
- -n : 패턴과 일치하는 프로세스들 중에서 가장 최근 프로세스만을 출력한다.
- -x : 패턴과 정확하게 일치되는 프로세스만 출력한다.
- -a : 전체 명령어 줄과 PID를 출력한다.
cf) 특정 프로세스만 리스트
$ ps -ef | grep -w sshd
: sshd 단어가 포함된 줄만 리스트
6.2 작업 제어
1) 쉘과 프로세스
2) 후면 처리
$ 명령어 &
3) 쉘 재우기
$ sleep 초
: 명시된 시간만큼 프로세스 실행을 중지시킨다.
4) 강제 종료 : ctrl C
5) 실행 중지 : ctrl D
6) 후면 작업의 전면 전환 : fg (foreground)
$ fg
: 정지된 작업을 다시 전면에서 실행시킨다.
$ fg %작업번호
: 작업번호에 해당하는후면 작업을 전면 작업으로 전환한다.
7) 전면 작업의 후면 전환 : bg (background)
$ bg %작업번호
: 작업번호에 해당하는 중지된 작업을 후면작업으로 전환하여 실행한다.
- 사용법 : ctrl Z로 전면 실행 중인 작업을 중지시키고 bg 명령어를 사용하여 후면 작업으로 전환
8) 후면 작업의 입출력 제어
- 후면 작업의 출력 : 출력 재지정 이용
- 후면 작업의 입력 : 입력 재지정 이용
6.3 프로세스 제어
1) 프로세스 끝내기 : kill
$ kill 프로세스번호
$ kill %작업번호
: 프로세스 번호(혹은 작업 번호)에 해당하는 프로세스를 강제 종료시킨다.
* exit 명령어 : exit [종료코드]
2) 프로세스 기다리기 : wait
$ wait [프로세스번호]
: 프로세스 번호로 지정한 자식 프로세스가 종료될 때까지 기다린다. 지정하지 않으면 모든 자식 프로세스가 끝나길 기다린다.
3) 프로세스 우선순위
- 실행 우선순위 : nice 값
- 19(가장 낮음) ~ -20(제일 높음)
- 보통 기본 우선순위 0으로 명령어 실행
- nice 명령어 : 주어진 명령을 조정된 우선순위로 실행한다.
$ nice [-n 조정수치] 명령어 [인수들]
- 현재 우선순위 출력
$ nice
- 프로세스 우선순위 조정 : 이미 수행 중인 프로세스의 우선순위를 명시된 우선순위로 변경한다.
$ renice [-n] 우선순위 [-gpu] PID
- -g : 해당 그룹명 소유로 된 프로세스
- -p :해당 프로세스의 PID
- -u : 지정한 사용자명의 소유로 된 프로세스
6.4 프로세스의 사용자 ID
1) 프로세스의 사용자 ID
- 프로세스는 사용자 ID와 그룹 ID를 갖는다.
- 그 프로세스를 실행시킨 사용자의 ID와 사용자의그룹 ID
- 프로세스가 수행할 수 있는 연산을 결정하는 데 사용된다.
- id 명령어 : 사용자의 실제 ID, 유효 사용자 ID, 그룹 ID 등을 보여준다.
$ id [사용자명]
- 프로세스의 실제 사용자 ID (real user ID)
- 그 프로세스를 실행시킨 사용자 ID
- 프로세스의 유효 사용자 ID (effective user ID)
- 현재 유효한 사용자 ID
- 보통 유효 사용자 ID == 실제 사용자 ID
- 새로 파일을 만들 때나 파일의 접근권한을 검사할 때 주로 사용됨.
- 특별한 실행 파일을 실행할 때 유효 사용자 ID는 달라진다.
2) set-user-id 실행파일
- set-user-id(set user ID upon execution) 실행 권한
- set-user-id가 설정된 실행파일을 실행하면 이 프로세스의 유효 사용자 ID는 그 실행파일의 소유자로 바뀜.
- 이 프로세스는 실행되는 동안 그 파일의 소유자 권한을 갖게 됨.
- 실행 권한 설정 예시
$ chmod 4755 파일
$ chmod u+s 파일
- set-user-id 실행파일을 실행하는 과정
- /bin/passwd 파일은 set-user-id 실행권한이 설정된 실행 파일이며 소유자는 root
- 일반 사용자가 이 파일을 실행하면 이 프로세스의 유효 사용자 ID는 root가 된다.
- 유효 사용자 ID가 root이므로 root만 수정할 수 있는 암호 파일 (/etc/shadow 파일을 접근하여 수정)
3) set-group-id 실행파일
- set-group-id(setgroup ID upon execution) 실행 권한
: 실행되는 동안에 그 파일 소유자의 그룹이 프로세스의 유효 그룹 ID가 된다.
- 실행권환 설정 예시
- set-group-id 실행권한은 8진수 모드로 2000 으로 표현된다.
$ chmod 2755 파일
$ chmod g+s 파일
6.5 시그널과 프로세스
1) 시그널
- 시그널 : 예기치 않은 사건이 발생할 때 이를 알리는 소프트웨어 인터럽트
- 시그널을 이용하여 프로세스를 제어한다.
- 시그널 리스트
$ kill -l
- 주요 시그널
시그널 이름 | 의미 | 기본 처리 |
SIGABRT | abort()에서 발생되는 종료 시그널 | 종료(코어 덤프) |
SIGALRM | 자명종 시계 alarm()이 울릴 때 발생하는 알람 시그널 | 종료 |
SIGCHLD | 프로세스의 종료 또는 정지를 부모에게 알리는 시그널 | 무시 |
SIGCONT | 정지된 프로세스를 계속시키는 시그널 | 무시 |
SIGFPE | 0으로 나누기와 같은 심각한 산술 오류 | 종료(코어 덤프) |
SIGHUP | 연결 끊김 | 종료 |
SIGILL | 잘못된 하드웨어 명령어 수행 | 종료(코어 덤프) |
SIGIO | 비동기화 I/O 이벤트 알림 | 종료 |
SIGINT | 터미널에서 ctrl c할 때 발생하는 인터럽트 시그널 | 종료 |
SIGKILL | 잡을 수 없는 프로세스를 종료시키는 식널 | 종료 |
SIGPIPE | 파이프에 쓰려는데 리더가 없을 때 | 종료 |
SIGPIPE | 끊어진 파이프 | 종료 |
SIGPWR | 전원고장 | 종료 |
SIGSEGV | 유효하지 않은 메모리 참조 | 종료(코어 덤프) |
SIGSTOP | 프로세스 정지 시그널 | 정지 |
SIGSTP | 터미널에서 ctrl z할 때 발생하는 정지 시그널 | 정지 |
SIGSYS | 유효하지 않은 시스템 호출 | 종료(코어 덤프) |
SIGTERM | 잡을 수 있는 프로세스 종료 시그널 | 종료 |
SIGTTIN | 후면 프로세스가 제어 터미널을 읽기 | 정지 |
SIGTTOU | 후면 프로세스가 제어 터미널에 쓰기 | 정지 |
SIGUSR1 | 사용자 정의 시그널 | 종료 |
SIGUSR2 | 사용자 정의 시그널 | 종료 |
2) 시그널 보내기 : kill 명령어
- kill 명령어
: 한 프로세스가 다른 프로세스를 제어하기 위해 특정 프로세스에 임의의 시그널을 강제적으로 보낸다.
- 사용법
$ kill [-시그널] 프로세스번호
$ kill [-시그널] %작업번호
- 프로세스 번호(혹은 작업번호)로 지정된 프로세스에 원하는 시그널을 보낸다.
- 시그널을 명시하지 않으면 SIGTERM 시그널을 보내 해당 프로세스를 강제 종료
- (예시) 종료 시그널 보내기
$ kill -9 프로세스번호
$ kill -KILL %작업번호
'전공과목 정리 > 리눅스시스템 + 시스템프로그래밍' 카테고리의 다른 글
[리눅스시스템🐧] 8장 파일 유틸리티 (4) | 2024.01.05 |
---|---|
[리눅스시스템🐧] 7장 인터넷과 서버 (2) | 2024.01.03 |
[리눅스시스템🐧] 5장 쉘과 명령어 사용 (2) | 2024.01.03 |
[리눅스시스템🐧] 4장 파일 사용 (2) | 2024.01.02 |
[리눅스시스템🐧] 3장 기본 명령어 (2) | 2024.01.02 |