Process
ps
ps [option]: process status
- 현재 세션의 프로세스들을 보여줌
- PID : process ID
- TTY : terminal ID
- TIME : cpu 점유(누적 사용) time (현실 시간은 ETIME)
- CMD : process 실행 명령어 (첫번째 인수, argv[0])
option
- -e : select all process
- -a : 특정 조건 제외하여 보여줌 = 세션 리더격만 확인하는 코드 (향후 다룸)
- -f : full-format
- -l : long-format (시스템 관리용)
- -el: all, long
- -ef: all, full
- -ej: all, jobs
- -eo: ?
- axf: “-” 기호 없음, BSD style (UNIX 표준화 후 여러 종류의 옵션을 지원하기 시작함)
full-format
- UIP : user ID, 프로세스의 소유권자
- PPID : parent PID (프로세스 생성 시 부모-자식과 같은 계층 프로세스가 만들어짐)
- C : CPU 사용량
- STIME : 프로세스를 시작한 realtime 시간 (시:분)
long-format ?
- F: 프로세스 플래그
- S: 상태 코드 (S: sleep, R: )
- PRI : 실시간 우선순위
- NI : 나이스 우선순위
- SZ : 메모리 크기
grep
- ps [option] | grep [commend]
- commend 명령을 실행한 프로세스만 표시
Process Control
kill
- 프로세스를 죽이는 명령어? No!
- UNIX의 kill은 이름을 잘못 지은 케이스다
- 시그널을 전송하는 기능
option
- -l : 사용 가능한 시그널 리스트 확인 기능
signal
- SIGHUP : [-HUP] signal hagn up → 끊다, 연결이 끊어졌을 때 보내짐
- SIGINT : [-INT] signal interrupt → 키보드 입력시 발생
- SIGQUIT : [-QUIT] signal quit → <CTRL-> 시스템이 이상할 때 종료하고 덤프로 확인(?)
- SIGTERM : [-TERM, 15]죽어달라고 요청하는 신호
- SIGKILL : [default] signal kill → 죽어달라고 프로세스에 요청하는 대신 프로세스를 강제로 죽임. SIGTERM에 응답이 없을 시 최후의 수단으로 사용
- SIGSEGV : [-SEGV] signal segment violation → 허용되지 않은 방법으로 메모리 침범 시도시 발생하는 시그널. 세그폴트
- SIGTSTP : [-TSTP] signal Temporary Stop 잠시 정지
job control
controlling terminal
사용자의 제어(키보드 입력)를 받는 터미널 장치
- CUI (console user interface)에서 멀티 테스킹을 위한 제어 방법
- 제어 터미널을 소유한 프로세스 (=fore-ground process) 는 키보드 입력을 가진다.
- 하나의 세션에서는 하나의 제어 터미널을 가질 수 있다.
규격
→ ps 명령어 출력의 TTY 필드에 표기
-
pts/# : UNIX98 Pseudo terminal system (가상 터미널)
-
tty# : console terminal (진짜 사용자 입력을 받는 콘솔 터미널 <CTRL-ALT-F#> 로 전환 : tty3, tty2…)
-
? : 제어 터미널을 가지지 않는 경우
-
참고: 규격의 발전
- 1998 SUSv2 (표준)
- 1995 SUSv1
- 1988 SVR4 (현대 UNIX의 모태)
fore/back-ground process
- fore-ground process
- 현재 session에서 제어 터미널(controlling terminal)을 가진 프로세스
- back-ground process
- 현재 session에서 제어 터미널(controlling terminal)을 잃어버린 프로세스
- CTRL-Z 시 변화
- SIGTSTP 시그널을 fore-ground 프로세스에 전달
- 작동 : 잠시 정지 시킴 = back-ground에 Stopped 상태로 전환됨
session ?
멀티 유저 시스템에서 통신 객체 (seat or remote)를 구별하기 위함
- 제어 터미널을 가질수도 안가질 수도 있다
- 시스템 접근 시 터미널에서 작업할 때 작업 공간을 만든 것 자체 = 세션을 받았다
- SID (session ID) == PID (process ID) 인 process = Session Leader
- Process Grop Leader를 겸한다
- Session Leader로 부터 파생된 자식 프로세스는 모두 같은 세션을 가진다.
- 이는 접속(세션 생성) 후 해당 프로세스가 어디서 유래했는지 추적인 가능하기 때문에 중요한 의미를 가짐
prosess group
세션이 만들어진 후 내린 명령으로 실행된 프로세스들의 계층
음수 번호로 적힌 프로세스 아이디 = 프로세스 그룹 아이디
commands
jobs, fg %#, bg %#, command &
jabs : stoped, back-ground process의 리스트 출력
fg %#: jobs의 작업 번호 입력 → 지정한 process를 fore-ground로 전환, 실행
bg %#: jobs의 작업 번호 입력 → 정지된 process를 back-ground에서 실행
command &: back-ground에서 running 상태로 실행