프로세스란
- 현재 시스템에서 실행중인 프로그램을 의미한다
- 리눅스는 한번에 여러 프로세스 실행 가능(다중 프로세스 시스템)
- 리눅스의 모든 프로세스는 부모 - 자식 관계 성립
프로세스 번호 (PID)
- 각 프로세스는 고유한 번호를 가진다 (PID)
- 1번부터 시작하여 프로세스가 실행되면서 하나씩 증가한다
프로세스의 개념
- 사용자가 실행하는 일반적인 프로세스는 잠깐 실행되고 종료
데몬 프로세스
- 특정 서비스를 제공하기 위해 존재하는 프로세스
- 평소 대기 상태로 있다가 요청이 들어오면 서비스를 제공한다
- 리눅스에서 다양한 서비스를 제공하기 위해 데몬이 동작
고아 프로세스
- 자식 프로세스가 아직 실행중인데, 부모 프로세스가 먼저종료 되면 자식 프로세는 고아 프로세스가 된다
- 이런 경우에 1번 프로세스가 고아 프로세스의 부모 프로세스가 된다
- 1번 프로세스는 고아 프로세스가 작업을 마치고 종료될 수 있도록 한다
좀비 프로세스
- 자식 프로세스는 종료될 때 종료 정보 exit status 를 부모 프로세스에게 보내고, 이 정보를 받은 부모 프로세스는 프로세스 테이블 목록에서 자식 프로세스 삭제
- 가끔 자식 프로세스의 실행을 종료 했는데 테이블 목록에 남아있는 경우가 있는데 이러한 자식 프로세스를 좀비 프로세스라고 한다
- 프로세스 목록에서 defunt 프로세스라고 나오기도 한다
- 좀비프로세스가 증가하면 테이블 용량이 부족해져 정상 프로세스가 실행되지 않을 수 있다
//프로세스 목록을 출력하는 명령어
ps
ps -f : 프로세스 상세 정보 출력
ps a : 터미널에서 실행시킨 프로세스 정보 출력하기
ps au : 터미널에서 실행 시킨 프로세스 상세 정보 출력하기
=====유닉스 옵션=====
ps -e : 전체 프로세스 목록 출력하기
ps -ef: : 전체 프로세스 목록 자세히 출력
=====BSD 옵션=====
ps ax : 시스템에서 실행중인 모든 프로세스 출력
ps aux : 시스템에서 실행중인 모든 프로세스에 대한 자세한 정보 출력
ps -u 사용자명 : 특정 사용자의 프로세스 목록 출력하기
ps -uf 사용자명 : 특정 사용자의 프로세스 목록 자세히 제공
ps -p 특저 PID : PID에 해당하는 프로세스의 정보 출력
==ps 와 grep 활용 (pgrep)==
ps -ef | grep bash : 특정 프로세스 정보 검색하기
ps 로 목록을 출력하면 나타나는 항목은 아래와 같다
- PID : 프로세스 번호
- TTY : 현재 터미널 번호
- TIME : 프로세스 실행시간
- CMD : 실행중인 명령어
프로세스 종료
불필요한 프로세스를 종료하기 위해서는 해당 프로세스의 PID를 알아야한다.
- ps -ef / ps aux 명령어로 확인하여 kill 이나 pkill 명령어로 프로세스를 종료
시그널 signal
- 프로세스에 무언가 발생했음을 알리는 간단한 메시지
- 무엇이 발생했는지는 미리 정의된 상수를 사용한다
- 시그널을 받은 프로세스는 기본적으로 종료되고, kill -l 명령어를 통해 시그널 목록 확인 가능
kill vs pkill
- kill 명령어는 PID로 프로세스를 종료하는 명령어
- pkill 명령어는 프로세스의 명령 이름(CMD)으로 프로세스를 찾아 종료
- killall 명령어는 프로세스의 pkill 처럼 CMD 를 찾아 프로세스를 종료하면서 해당이름으로 시작하는 모든 프로세스를 한번에 종료한다
프로세스 관리 명령
프로세스 관리 도구 : top 명령 = 윈도우의 작업 관리자
- 현재 실행중인 프로세스 정보를 주기적으로 출력
포그라운드/백그라운드 프로세스와 작업제어
- 보통은 한번에 하나의 프로세스만 실행가능하므로, 하나의 명령이 종료되어야만 다시 터미널 사용 가능
- 한 터미널에서 동시에 여러 프로세스를 실행하고 관리하는 기능
fore-ground 작업
- 사용자가 입력한 명령이 실행되어 결과가 출력될 때까지 기다리는 방식으로 처리되는 프로세스를 포그라운드 프로세스라고 한다.
- 일반적인 작업 실행 방식, 프롬프트가 출력되지 않아 다른 명령입력이 불가능하므로 대기가 필요하다
- 우리가 흔히 아는 동작방식
back-ground 작업
- 명령의 종료여부와 상관없이 곧바로 프롬프트가 출력되어 다른 작업을 계속할 수 있다
- 한 터미널에서 여러개의 프로세스를 동시에 실행 가능
- 명령을 백그라운드로 실행하려면 & 기호를 명령의 마지막에 추가
- &기호 추가시 프롬프트가 바로 나옴
작업 제어
작업 전환, 작업 일시 중지, 작업 종료를 의미
작업 전환 : 포그라운드 작업 ↔ 백그라운드 작업
작업 일시 중지 : 작업을 잠시 중단
작업 종료 : 프로세스 종료처럼 작업 종료
작업 목록 보기
jobs 명령어 사용
작업 전환하기
ctrl + z 또는 %작업번호 : 포그라운드 작업 중지 (잠시 중지)
bg %작업번호 : 작업번호의 작업을 백그라운드 작업으로 전환
fg %작업번호 : 작업번호의 작업을 포그라운드 작업으로 전환
작업 종료하기
ctrl + c
kill pid
kill %작업 번호
작업 예약
- 주기적으로 반복해야하는 작업이 필요할 때, 특정시간 작업을 실행하는 예약방법 2가지 존재
- 정해진 시간에 한번만 실행 : at
- 정해진 시간에 반복 실행 : crontab
crontab 파일 형식
- crontab 명령으로 관리하는 파일은 사용자별 생성
- crontab 파일에는 여러개의 작업을 저장하고, 한 행에 하나의 작업을 설정한다
- crontab 파일은 다음과 같이 여섯 항목으로 구성한다
- 분 (0~59)
- 시(0~23)
- 일(1~31)
- 월(1~12)
- 요일(0~6)
- 작업 내용
- 이때 요일은 0이 일요일, 1일 월요일, 6이 토요일을 의미
- 각 항목은 공백 문자로 구분하고 *은 해당 항목의 모든 값을 의미한다
- 예를 들면 다음과 같다 30 23 1 * * sleep 100
- 위 cron의 해석은 다음과 같다 → 매월 1일 23시 30분에 sleep 명령어 실행
crontab 명령어
crontab -e : 작업 생성 -> crontabs 경로에 사용자 이름으로 생성
crontab -l : 파일 내용 확인하기
crontab -r : 파일 삭제
'Linux' 카테고리의 다른 글
[Linux] Shell , Bash, Alias (1) | 2024.10.16 |
---|---|
[Linux] Vi 와 Vi 명령어 (0) | 2024.10.13 |
[Linux] 디렉토리 및 파일 명령어 (1) | 2024.10.12 |
[Linux] Unix와 Linux , GUI 와 CLI, 리눅스 기본 명령어 (0) | 2024.10.12 |