프로세스란

  • 현재 시스템에서 실행중인 프로그램을 의미한다
  • 리눅스는 한번에 여러 프로세스 실행 가능(다중 프로세스 시스템)
  • 리눅스의 모든 프로세스는 부모 - 자식 관계 성립

프로세스 번호 (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 : 파일 삭제