1. 프로세스
1) 프로그램 실행 시
① 디스크에 저장된 프로그램을 커널이 메모리에 올린다.
② 메모리에 올라간 프로그램을 CPU가 실행한다.
2) 프로세스
→ 메모리 위에 올라가서 실행 중인 프로그램, 각각 pid라는 고유 번호를 할당받아 관리
2. ps 명령어
1) $ ps : 프로세스 조회
bash는 실행하자마자 열리고, ps는 ps를 입력하여 추가된 것으로 각각 고유의 PID가 배정되는 것을 확인할 수 있다.
위와 같이 특정 명령이 실행되면 프로세스로 전환되고, 실행이 끝나면 프로세스 목록에서 사라진다.
2) $ ps x : 백그라운드에서 돌아가는 프로세스 조회
※ 데몬 프로세스 : 터미널과 무관하게 돌아가는 프로세스 → 항상 켜져 있어야 하는 속성의 프로세스
3) $ ps a : 시스템의 모든 프로세스 조회
위와 같이 시스템 내부에서 동작 중인 모든 프로세스를 조회할 수 있고, 조회된 PID를 이용해 여러가지 작업을 할 수 있다.
4) ps 옵션 : "-"를 쓰지 않는다.
x | 사용자의 프로세스 전체 출력 |
ux | 사용자의 프로세스 상세히 출력 |
ax | 모든 사용자의 프로세스 출력 |
aux | 모든 사용자의 프로세스를 상세히 출력 |
auxww | aux 결과가 화면에 잘리지 않도록 출력 |
5) $ ps ux | less : 모든 프로세스를 페이지별로 출력 (종료:q)
6) $ top : 메모리 구조 살펴보기
위와 같이 메모리 사용량 등을 실시간으로 보여준다.
※ 참고
- VIRT : 가상 할당량 → RES의 최대치
- RES : 실질 할당량
- SHR : 공유 메모리 영역
3. 잡
1) 잡 (job)
- 프로세스 : 커널 입장에서 실행
- 잡 : 셸에서 실행하고 있는 단위
위와 같이 man bash를 ctrl+z로 강제종료시켰을 때 job이 하나 생성된 것을 확인할 수 있다.
실행 중인 프로그램이 종료되면 프로세스 목록에서 사라지기 때문에 잡에서는 확인할 수 없다.
잡 목록에서 PID를 조회하고자 할 때 -l 옵션을 사용한다.
2) $ fg : 잡의 포그라운드 전환
foreground : 사용자의 입력을 받을 수 있는 상태
→ 정지 상태에 있는 bash 메뉴얼을 다시 확인하기 위해서는 포그라운드로 되돌려야 함
위와 같이 fg %번호 명령어를 이용하여 포그라운드로 전환할 수 있고, 잡이 하나인 경우에는 fg만 입력해도 된다.
3) $ bg : 잡의 백그라운드 전환
background : 잡을 종료하지 않은 채 셸로 전환
위와 같이 포그라운드 상태에서는 sleep이 끝날 때까지 아무것도 하지 못한다.
백그라운드 상태에서는 sleep이 끝나지 않고도 제어권을 되찾아오고, 잡은 백그라운드에서 60초를 수행할 때까지 돌아가는 병렬적인 작업을 수행하게 된다.
포그라운드와 마찬가지로 bg %번호 명령어를 이용하여 백그라운드로 전환할 수 있고, 잡이 하나인 경우에는 bg만 입력해도 된다.
4) 잡과 프로세스의 종료
① 잡의 종료
- 포그라운드 : ctrl + c
- 백그라운드 : kill %잡번호
위와 같이 kill 명령어를 이용하여 백그라운드에 있는 잡을 종료시킬 수 있다.
② 프로세스의 종료 : kill PID번호
위와 같이 kill PID번호 명령어를 입력하여 프로세스를 종료할 수 있다.
프로세스는 현재 로그인중인 유저가 실행한 프로세스만 삭제할 수 있고, 루트 계정만 다른 사용자의 프로세스를 강제로 종료할 수 있다.
5) kill : 프로세스에 특정한 신호를 보내는 명령어
SIGHUP, 1 | 터미널 제어 시 또는 제어 프로세스 종료 시 감지 |
SIGUNT, 2 | 키보드에서 보내는 인터럽트 신호 |
SIGQUIT, 3 | 키보드에서 보낸 종료 신호 |
SIGABRT, 6 | abort(3)로 받은 신호 무시 |
SIGKILL, 9 | kill 신호 |
SIGTERM, 15 | 중단 신호 |
SIGCONT, 19, 18, 25 | 중지된 프로세스 재개 |
SIGSTOP, 17, 19, 23 | 프로세스 중지 |
ex) PID가 10023인 프로세스를 중지시킬 경우
$ kill 10023
$ kill -9 10023
$ kill -SIGKILL 10023
위와 같이 해당 프로세스가 잘 종료된 것을 확인할 수 있다.
6) killall : 프로세스명으로 종료시키는 명령어
$ killall -9 프로세스명
위와 같이 killall 명령어를 이용하면 특정 pid가 아닌 같은 이름을 가진 모든 프로세스를 동시에 종료할 수 있다.
'네트워크캠퍼스 > LINUX' 카테고리의 다른 글
Shell Script (0) | 2024.01.17 |
---|---|
Devops와 SE를 위한 리눅스 커널 이야기 (0) | 2024.01.17 |
텍스트에디터 (0) | 2024.01.15 |
파일시스템 (0) | 2024.01.11 |
프롬프트 (0) | 2024.01.10 |