I. Process 관련 명령어
- ps, pgrep
- kill, pkill
- Job control
- top
###1. ps
##1.process status

ps: 현재 세션의 프로세스들을 보여줌.
PID: 프로세스 ID
TTY: terminal ID
TIME: CPU 시간(cpu 점유했던 시간 누적값) <-> ETIME(elapsed time, 현실 세계 시간)
CMD: command , 프로세스 이름 ( argv[0] 만 보여준다.)
##2.ps - all processes

ps -e : 전체 프로세스들 상태 보여줌
ps -a : 세션 리더들, 터미널과 연관된 프로세스들 제외한 나머지 프로세스들 상태 보여줌
##3. ps - full-format
ps -f : format이 이전 e,a 에비해 늘어남

UID: 해당 프로세스의 소유권자 ID(User ID)
PID: 프로세스 ID
PPID: 부모 프로세스 ID(Parent PID)
C: CPU 사용량
STIME: 프로세스를 시작한 시간(시:분) [현실세계 시간]
TTY: Terminal ID
TIME: CPU 시간(누적시간)
#4. ps: long-format

F: 프로세스 플래그
S: 상태코드(State code)
PRI: 실시간 우선순위(real time priority)
NI: 나이스 우선순위(Nice) , 사용가능 범위 : -20~19(음수일수록 우선순위 높음, default 값 0)
SZ: 사용되는 프로세스 코어 이미지의 메모리 크기 (KB)
C: CPU Usages => cpu사용량, 현재 사용량이 아닌 누적된 수치의 퍼센트 (cpu time / elapsed time)* 100
#5 조합(초급자들이 주로 사용)
ps: all ,long, full
ps -el (all, flong)
ps -ef (all, full)
ps -ej (all, jobs [pid, pgid, sid, tty])
#5-2 조합 (BSD, SysV 스타일)
1. UNIX 표준화 후 2가지 옵션 지원
1) ps axf
=>BSD style
2) ps -e --forest
=>UNIX SysV style
2.man ps 참조
(UNIX SysV, BSD, GNU style)

**1. UNIX는 AT&T 의 유닉스
1. UNIX 예제


2. BSD 예제

**grep <name> name에 들어가는 행만 뽑아냄.
#5 실력자들이 특정 단어를 찾는 방법
jlim@jlim-vm:~$ alias pscpu='ps -eo s,pid,ucmd:12,etime,pcpu,time,pmem,rss --sort=-time,-pcpi | head'
jlim@jlim-vm:~$ alias psmem='ps -eo s,pid,ucmd:12,etime,pcpu,time,pmem,rss --sort=-pmem,-rss | head'
pscpu
이거에 대해 향후 공부해보자 ( 실행 시 되지 않네)
alias 만드는 법과 .bashrc 나 .bash_aliases에 넣어두어서 사용하면 장문 쓸 필요없음(bash shell 부분)
II. Process control 1
- kill: send signal
- UNIX Signal
##1 kill
#1 kill 명령어는 프로세스를 죽이는 명령보단, 프로세스에 시그널을 전송하는 기능이다.
kill -l 명령으로 signal 종류 확인 가능

빨: 중요, 초록: 그럭저럭 중요
#2 유닉스 시그널
- SIGHUP: Hang Up
- SIGINT: Interrupt <Ctrl-C>
- SIGQUIT: Quit <Ctrl-\>
- SIGKILL: kill
- SIGSEGV: Segment violation
- SIGTERM: Terminate
- SIGTSTP: Temporary Stop
core dump (메모리 상태 덤프) 여부에 따라 SIGQUIT인지 SIGINT인지 구분한다.
core dump하는게 SIGQUIT.
SIGKILL은 강제로 죽이는 KILL이다.
SIGTERM 프로세스에게 죽어달라 요청하지만, 이 요청을 거부하면 최후 수단으로 강제로 죽이는 경우가 있는데, 이는 시스템내에서 기록하고 있던 파일이 깨질 수 있는 위험이 있다.
SIGSEGV:(SEGV:Segement Violation) 프로그램이 이상작동으로 메모리 침범으로 죽은 것.
SIGTSTP: Ctrl-Z 인터럽트로 발생, 잠시 멈추게하는 경우다.
| 명령어 예시 | 설명 |
| kill 13011 | PID 13011 프로세스에 SIGTERM 시그널 보냄 |
| kill -QUIT 13013 | PID 13013 프로세스에 SIGQUIT 시그널 보냄 |
| kill -9 13012 (== kill -KILL 13012) | PID 13012 프로세스에 9번 시그널(SIGKILL) 보냄 |
숫자나 이름으로 signal 명령어 타이핑하는데 SIG는 생략.
SIGKILL은 최후의 수단으로 되도록 쓰면 안됨!!!
프로그램 종료 시킬때 SIGTERM, SIGINT, SIGQUIT 등 다른 방법으로 해결하고 안되면 SIGKILL

터미널1번
less ~/.bashrc
터미널2번
ps -e | grep less
kill PSID번호
터미널1번과 2번을 켜놓은 상태에서 각 위 명령어를 적어두면 2번에 의해 1번이 실행중인 less 프로세스가 종료됨을 확인할 수 있다.
III. Process control
- Job control : fg, bg
- foreground, background 정의
- session, controlling terminal
##1. Job control: fore/back-ground process
#1. fore-ground process
1) 현재 session 에서 제어터미널(controlling terminal)을 가진 프로세스
#2. back ground process
1) 현재 session에서 제어터미널을 잃어버린 프로세스
#3. Ctrl -Z
1) SIGTSTP(Signal - Temporary Stop) 시그널을 fore- gorund 프로세스에 전달
2) 작동: 잠시 정지시킴 = 결과적으로 back-ground에 Stopped 상태가 됨
#4. 세션(Session)
- 세션이란?
컴퓨터 과학에서, 특히 네트워크 분야에서 반영구적이고 상호작용적인 정보 교환을 전제하는 둘 이상의 통신 장치나 컴퓨터와 사용자 간의 대화나 송수신 연결상태를 의미하는 보안적인 다이얼로그 및 시간대를 가리킨다 -위키피디아-
1) 세션은 제어 터미널을 가질 수 있다.(option이라 없을 수도 있다)
2) SID == PID 세션 아이디와 프로세스 아이디가 같은 프로세스는 Session 리더라 부름.
세션 리더로부터 나온 자식프로세스들은 모두 같은 세션을 가지고 있어 로그아웃 시 해당 프로세스 SID들을 모두 파괴된다.
#5 제어터미널
1)사용자 제어(키보드 입력) 를 받는 터미널 장치
제어터미널에선 프로세스 소유를 최대 1개밖에 소유 못한다. 그래서 하나의 세션에 Fore ground process 는 최대 하나 존재한다.
#6 제어 터미널 규격
1) pts/# : 가짜 터미널 UNIX98 Pseudo terminal system
2) tty# : 진짜 터미널 (ctrl f2~f6)
#7 Session에서 제어 터미널 가지지 않는 경우 ps의 TTY필드에 ? 로 나타남.
- ps -e | less 확인하기.

#7 Process Group(세션 리더의 PID 값 == Process Group ID)
session 만들어지고 명령을 내리면 명령 내린 프로세스의 계층에 그룹이 만들어진다.
프로세스 그룹 리더는 시그널 전파 기능을 가진다.
kill -USR1 -14901 PID 값이 -라고 되있으면 프로세스 그룹 ID (== PID)이다. 그럼 ) 그룹에 포함된 자식 프로세스들도 Kill 된다.
** 시스템 구성 중 세션은 제어 터미널을 갖을 수 있고, 해당 세션안에 복수의 프로세스 그룹이 존재;.
#8 daemon 프로세스
1) Orphan process
2) stdio를 모두 /dev/null 로 redirection을 건다.( stdio 비활성화)
3) control teminal 를 가지지 않는다.
백그라운드에서 시스템 작업 용도로 쓰임
#9 job control : commands
1) jobs => stoped, back-ground process 의 리스트 출력
2) fg %#
=> #에는 jobs 작업번호. (%는 생략 가능)
=> 지정한 프로세스를 fore-ground 한다.
3) bg %#
=>정지된 백그라운드 프로세스를 back ground 에서 running 상태로 변경
4) command &
=> command를 back-ground에서 running 상태로 실행

vi 와 vim , vim hello.c 를 각각 실행 후 ctrl+ z 를 눌러 일시정지시킨다.
그리고 위와 같은 시간이 가는 코드를 작성 후 ctrl+d 로 빠져나오며, bash printdate.sh
타이핑해 쉘스크립을 실행.
ctrl z 누르면 3번 - 4번이 +에 있다. fg %2 타이핑시 2번작업이 foreground에 올라온다.
ctrl-z 후 jobs 타이핑 시 2번이 + (가장 최근에 실행된 프로그램) 4번이 - ( 최근 실행 이전에 실행된 프로그램)_
bg %3 하면 background가 되어 러닝 상태로 변경된다. 제어터미널을 잃어버렸기에 프로그램이 무한루프로 출력이 되는데, kill 명령으로 시그널 보내거나 foreground 불러와서 죽여야한다.
fg %3 ctrl+C 타이핑
Session이 종료될 때 session 리더로부터 파생된 child process 들은 SIGHUP 를 받게 된다.(최근에 리눅스는 이를 사용치 않는다)
해당 내용은 프로그래머스 리눅스 강의 김선영 선생님의 강의를 들으며 기록했습니다.
'프로그래머스 > 리눅스' 카테고리의 다른 글
| 리눅스 기초 (3-2) vim 일반모드 기능 (0) | 2022.11.05 |
|---|---|
| 리눅스 기초 (3-1) vim 설치 및 기본 명령어(이동) (2) | 2022.11.05 |
| vim 편집기 내에서 diff 방법 (0) | 2022.11.04 |
| vim 뻑가는 경우 (0) | 2022.11.03 |
| 리눅스 기초(2-5) 링크에 대해 (0) | 2022.11.03 |