프로세스 실행 방식
리눅스의 프로세스는 포그라운드와 백그라운드방식으로 동작한다.
- 포그라운드(foreground): 사용자가 입력한 명령이 실행되어 결과가 출력될 때까지 기다려야 하는 방식. 대화식
- 백그라운드(background): 한 터미널에서 여러 개의 프로세스를 동시에 실행할 경우, 뒤에서 실행되는 방식.
# 포그라운드 방식
$ command
$ ping google.com
# 백그라운드 방식 -- &추가
$ command &
$ ping google.com &
# nohup 커맨드(no hang up)
$ nohup command &
$ nohup ping google.com &
프로세스 목록 확인
ps
현재 실행 중인 프로세스의 목록을 확인한다.
- PID : 프로세스 번호
- TTY : 프로세스가 실행된 터미널의 종류와 번호
- TIME : 프로세스 실행 시간
- CMD : 실행되고 있는 프로그램의 이름(명령)
- UNIX 방식
- ps -e : 시스템에서 실행 중인 모든 프로세스의 정보를 출력한다.
- ps -f : 프로세스의 자세한 정보를 출력합니다.
- ps -u uid : uid로 특정한 사용자에 대한 모든 프로세스의 정보를 출력한다.
- ps -p pid : pid로 지정한 특정 프로세스의 정보를 출력한다.
- BSD 방식
- ps a : 터미널에서 실행한 프로세스의 정보를 출력한다.
- ps u : 프로세스 소유자의 이름, CPU 사용량, 메모리 사용량 등 상세 정보를 출력한다.
- ps x : 시스템에서 실행 중인 모든 프로세스의 정보를 출력한다.
- ps -f의 출력 정보
- UID : 프로세스를 실행한 사용자 ID
- PPID : 부모 프로세스 번호
- C : CPU 사용량(%)
- STIME : 프로세스의 시작 날짜나 시간
- TTY : 프로세스가 실행된 터미널의 종류와 번호
- STAT : 프로세스 상태
- ps a, u, x의 출력 정보
- USER : 사용자 계정 이름
- %CPU : CPU 사용량(%)
- %MEM : 물리적 메모리 사용량(%)
- RSS : 사용하고 있는 물리적 메모리의 크기(kb)
- VSZ : 사용하고 있는 가상 메모리의 크기(kb)
- START : 프로세스 시작 시간
pstree
컴퓨터의 전체 프로세스를 구조화하여 확인한다.
jobs
백그라운드에서 수행 중인 프로세스를 확인한다.
sample.sh이라는 쉘 스크립트를 편집하기위해 텍스트편집 프로그램 vim을 백그라운드에서 실행하고 프로세스를 확인해보자.
[1], [2]는 작업 번호를 의미하고, +는 현재 처리되고 있는 작업, -는 다음에 작업할 프로세스를 의미한다.
그 옆의 '멈춤'은 다음을 의미한다.
- Running : 실행 중
- Stopped : 일시 중단(Ctrl + Z 입력)
- Terminated : 강제 종료(kill 명령 종료)
- Done : 정상 종료
fg %작업번호 //백그라운드 -> 포그라운드 작업전환
kill
프로세스가 종료될 때, 프로그램을 종료하는 이벤트가 발생하고 이를 프로세스에 전달하는 과정이 필요하다.
프로그램을 종료하는 이벤트를 시그널(Signal)이라 하고, 프로세스에 전달하는 명령어를 kill이라 한다.
kill -l //이를 통해 다양한 시그널의 종류를 확인할 수 있다.
그러나 자주 쓰이는 시그널은 다음과 같다.
더보기
- SIGHUP : 재시작할 때 사용
- SIGINT : 실행 중지 시그널, Ctrl + c
- SIGKILL : 프로세스 강제 종료
- SIGTERM : 프로세스 정상종료 (기본 명령)
- SIGCONT : 정지된 프로세스 실행
- SIGSTOP : 터미널에서 입력되는 정지 시그널
- SIGTSTP : 실행 정지 후 재실행 대기, Ctrl+ z
시그널을 이용해 프로세스를 종료시키려면 다음과 같은 문법으로 사용한다.
kill -시그널번호(시그널명) %작업번호
kill -시그널번호(시그널명) PID
'OS > Linux' 카테고리의 다른 글
[Linux]환경변수 설정 (0) | 2022.02.13 |
---|---|
[Linux]표준 스트림과 리다이렉션, 파이프 (0) | 2022.02.11 |
[Linux]프로세스, 스레드, 멀티 스레드 (0) | 2022.02.11 |
[Linux]패키지와 패키지 매니저 (0) | 2022.02.11 |
[Linux]개념과 필요성 (0) | 2022.02.09 |