프로세스의 개념

  • 프로세스는 CPU와 메모리를 할당받아 실행시키는 프로그램.(= 실행 중인 프로그램)
  • 프로세스마다 고유의 프로세스 ID인 PID를 할당 받음.
  • 프로세스 init에 의해 다른 모든 프로세스들이 시작.

포그라운드 프로세스와 백그라운드 프로세스

  • 포그라운드 프로세스(Foreground)
    • 사용자와 상호작용하는 프로세스.
    • 터미널에 직접 연결되어 입출력을 주고받는 프로세스.
    • 명령 입력 후 수행 종료까지 기다려야 하는 프로세스.
    • 화면에서 실행되는 것이 보이는 프로세스.
  • 백그라운드 프로세스(Background)
    • 사용자와 직접적인 대화를 하지 않고 뒤에서 실행되는 프로세스.
    • 사용자의 입력에 관계없이 실행되는 프로세스.
    • 실행은 되지만 화면에 나타나지 않고 실행되는 프로세스.

fork()와 exec()

  • fork() 함수
    • 새로운 프로세스를 만들 때 기존 프로세스를 복제하는 방식을 사용.
    • 새로운 프로세스를 위한 메모리를 할당.
    • 원본 프로세스를 부모 프로세스라 부르고 새로 복제된 프로세스를 자식 프로세스라 부름.
      ( 메모리 영역은 서로 다르지만 소스 코드는 동일)
  • exec() 함수
    • 호출하는 프로세스가 새로운 프로세스로 변경되는 방식.
    • 새로운 프로세스를 위한 메모리를 할당하지 않음.
    • 호출한 프로세스의 메모리에 새로운 프로세스의 코드를 덮어씌워 버림.
    • exec()를 호출한 프로세스가 아닌 exec()에 의해 호출된 프로세스만 메모리에 남게 됨.

데몬(Daemon)

  • 리눅스 시스템이 부팅 시 자동으로 실행되는 백그라운드 프로세스.
  • 메모리에 상주하면서 사용자의 특정 요청이 오면 즉시 실행되는 대기 중인 서버 프로세스.
  • 주기적이고 지속적인 서비스 요청을 처리하기 위해 실행.
  • 리눅스에서 데몬을 실행하는 방법에는 아래 표와 같이 3가지 방법이 존재.
standalone
데몬
- 서비스가 요청이 드르어오기 전에 서비스가 메모리에 상주하는 단독 실행 방식

- 빠른 응답속도를 요하는 경우에 사용

- 메모리에 항상 상주하므로 메모리 점유로 인한 서버 부하가 큼

- 관련 서비스: http, mysql, nameserver, sendmail 
inetd 데몬
(슈퍼 데몬)
- inetd는 다른 데몬들의 상위에 존재하는 standalone epahs

- inetd는 자체적으로는 하나의 독립 데몬이지만 여러 가지 다른 서비스를 제어하고 관리
inetd 타입
데몬
- 직접 서비스를 가동하지 못하고 inetd 데몬이 활성화가 되어야만 해당 서비스 제공

- Telnet, FTP, rlogin과 같은 데몬들이 inetd 타입 데몬에 해당

- 실행 스크립트 파일 위치는 "/etc/xinetd.d/"

시그널(Signal)

  • 프로세스에게 이벤트 발생을 전달해주는 소프트웨어 인터럽트.
  • 명령어 kill -l로 시그널 리스트를 확인할 수 있음.
  • 시그널이 프로세스에게 전달될 때 4가지 상황이 발생.
SIG_IGN (SIG_PF)1 운영체제에 의해 시그널이 무시.
SIG_ERR (SIG_PF)-1 운영체제는 프로그램을 강제로 종료.
SIG_DFL (SIG_PF)0 지정한 시그널 처리 루틴(routine)을 실행.
SIG_HOLD (SIG_PF)2 시그널이 블로킹됨.

프로세스 관련 명령어

  • ps(process status) - 현재 실행 중인 프로세스의 상태를 보여주는 명령어로 CPU 사용도가 낮은 순서대로 출력.
  • pstree - 실행 중인 프로세스들을 트리구조로 나타냄.
  • jobs - 작업이 중지된 상태, 백그라운드로 진행 중인 상태, 변경되었지만 보고되지 않은 상태 등을 표시.
  • bg와 fg - bg는 현재 실행 중인 프로세스를 백그라운드 작업으로, fg는 현재 실행 중인 명렁어를 포그라운드로 전환.
  • kill - 프로세스를 종료시킴.
  • killall - 여러 프로세서를 한 번에 종료시킬 때 사용.

  • nice - 프로세스 사이의 우선순위를 확인하고 우선순위를 변경할 수 있는 명령어.
    조정할 수 있는 NI값의 범위는 -20(가장 높은 우선권) ~ 19(가장 낮은 우선권), 디폴트는 10을 사용.
  • renice - 이미 실행 중인 프로세스의 우선순위를 변경.
    nice는 양수값에 -, 음수 값에 --를 사용하지만 renice는 양수값에 -를 사용하지 않음.
    ex) 'renice -20 3214'는 프로세스 3214의 NI값을 -20으로 변경.

  • top - 리눅스 시스템의 운영 상태를 실시간으로 모니터링하거나 프로세스 상태를 확인할 수 있음.
    기본으로 5초에 한 번씩 실시간으로 시스템 상태 정보가 갱신.
  • nohup - 프로세스가 중단되지 않고 백그라운드로 작업을 수행할 수 있게 함.
    백그라운드로 실행될 수 있도록 명령행 뒤에 '&'를 표시.
  • tail - 파일의 마지막 행을 기준으로 지정한 행까지 파일 내용의 일부를 출력하는데 기본값으로 마지막 10줄을 출력함.

스케쥴링과 cron

  • 주기적으로 반복되는 일을 자동적으로 실행될 수 있도록 설정.
  • 스케줄링 데몬은 "crond"이며, 관련 파일은 "/etc/crontab".
  • 파일 /etc/crontab은 7개의 필드로 구성되어 있음.
  • "백업 스크립트 파일 /etc/backup.sh를 매주 화요일과 목요일 오전 4시에 실행한다" 하면 아래와 같이 표현할 수 있음.
분(min) 시(hour) 날(day) 달(month) 요일 사용자 명령어
* 4 2,4   /etc/backup.sh

 

'DevOps&Infra > Linux' 카테고리의 다른 글

02-5 소프트웨어 설치 및 삭제  (0) 2022.09.16
02-4 에디터  (0) 2022.09.12
02-2 셸(Shell)  (0) 2022.08.28
02-1 파일 시스템 관련 명령어  (0) 2022.08.28
01-3 리눅스의 기본 명령어(3)  (0) 2022.07.30