HotFoxy
불여우의 전직 이야기
게임 서버 개발자가 되어 보죠!
전체 방문자
오늘
어제
  • 분류 전체보기 (135)
    • 연구한 이야기 (26)
      • 깊게 공부해보기 (7)
      • 문제 해결 이야기 (12)
      • 맡은 업무 이야기 (6)
    • 전직 이야기 (0)
      • 1년이라는 시간 (5)
      • 프로카데미 이야기 (5)
    • 공부한 이야기 (87)
      • 알고리즘 (7)
      • 리눅스 (11)
      • 클라우드 (24)
      • 윈도우 OS (17)
      • 윈도우 소켓 프로그래밍 (11)
      • 네트워크 (16)
      • Docker & K8S (0)
      • 기타 (1)
    • 자격증 이야기 (12)
  • MSB : Mad Square's Brawl
  • GITHUB

인기 글

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
HotFoxy

불여우의 전직 이야기

리눅스 - 프로세스 관리
공부한 이야기/리눅스

리눅스 - 프로세스 관리

2022. 8. 20. 23:37

프로세스

프로세스는 CPU와 메모리를 할당받아 실행시키는 프로그램이다.

가장 먼저 실행되는 init 이라는 프로세스 (PID : 1) 에 의해 다른 모든 프로세스가 실행된다.


프로세스 유형

  • Foreground Process
    • 사용자와 상호작용하는 프로세스
    • 입출력을 주고받거나 수행 종료까지 기다려야 하는 프로세스
    • 응용 프로그램, 명령어 등
  • Background Process
    • 사용자와 직접적인 대화 없이 뒤에서 실행되는 프로세스
    • 입력에 관계없이 실행되는 프로세스
    • 시스템 프로그램, 데몬 등

fork()

사용자가 새로운 프로세스르르 생성하기 위해 사용하는 시스템 함수

  • 기존 프로세스를 복제하는 방식을 사용한다.
  • 새로운 프로세스를 위한 메모리를 할당한다.
  • 원래의 프로세스와 똑같은 코드를 가지고 있다.

exec()

호출하는 프로세스가 새로운 프로세스로 변경되는 방식이다.

  • 새로운 프로세스를 위한 메모리를 할당하지 않는다.
  • 호출한 프로세스의 메모리에 새로운 프로세스의 코드를 덮어씌운다.

Daemon

리눅스에 시스템이 부팅 시 자동으로 실행되는 백그라운드 프로세스

  • 메모리에 상주하며 사용자의 특정 요청이 오면 즉시 실행되는 대기중인 서버 프로세스이다.
  • 주기적이고 지속적인 서비스 요청을 처리하기 위해 실행된다.

데몬의 실행 방법

타입 설명
standalone 서비스가 요청이 들어오기 전에 서비스가 메모리에 상주하는 단독 실행 방식
독립적으로 수행되며 항상 메모리에 상주한다
빠른 응답속도를 요할 때 사용하며, 서버 부하가 크다.
/etc/rc.d/init.d/ 에 실행 스크립트가 위치한다.
관련 서비스로는 http, mysql, nameserver, sendmail 등이 있다.
(x)inetd데몬 (슈퍼 데몬) (x)inetd은 다른 데몬들의 상위에 존재하는 standalone 데몬이다.
다른 여러 서비스들을 제어하고 관리한다.
리눅스 커널 2.4 부터 inetd대신 inetd가 사용된다.
inetd 타입 데몬 inetd 타입 데몬들은 inetd 데몬이 활성화 되어야만 서비스를 제공할 수 있다.
Telnet, FTP, rlogin 같은 데몬들이 해당한다.
실행 스크립트는 /etc/xinetd.d/ 에 위치한다.

Signal

시그널은 프로세스에게 이벤트 발생을 전달해주는 소프트웨어 인터럽트이다.

  • SIG_IGN (1)
    • 운영체제에 의해 시그널이 무시된다.
  • SIG_ERR (-1)
    • 운영체제는 프로그램을 강제로 종료한다.
  • SIG_DFL (0)
    • 운영체제는 시그널 처리 루틴을 실행한다.
  • SIG_HOLD (2)
    • 시그널이 블로킹된다.

이러한 시그널은 kill -l 명령어를 통해 확인할 수 있다.

번호 시그널 발생 조건 기본동작
1 SIGHUP 터미널과 연결이 끊어졌을 때 종료 후 재시작
2 SIGINT Ctrl+C 입력 시 종료
3 SIGQUIT Ctrl+\ 입력 시 코어덤프
9 SIGKILL 프로세스 강제 종료 시 종료
15 SIGTERM kill 시스템 호출 시 종료
20 SIGTSTP Ctrl+Z 입력 시 프로세스 대기로 전환

프로세스 유틸리티

ps

현재 실행 중인 프로세스의 상태를 보여준다.

CPU 사용량이 낮은 순서로 출력한다.

$ ps [옵션]
옵션

a : 실행 중인 모든 프로세스 출력 (All)

e : 모든 프로세스 정보 (Every)

u : 사용자 이름과 프로세스 시작 시간 출력 (User)

l : 자세한 정보 출력 (List)

x : 접속된 터미널 외에도 사용되는 모든 프로세스 출력

상태 설명
PID 프로세스 식별번호
VSZ 페이지 단위의 가상메모리 사용량
RSS 실제 사용된 메모리량
TTY 연결된 터미널 번호
F 프로세스 플래그
PRI 실행 우선순위 값
NI NICE 우선순위 계산 값
SZ 프로세스 블록 크기
WCHAN 프로세스 대기나 기다리는 사건

pstree

실행 중인 프로세스들을 트리구조로 나타낸다.

$ pstree [옵션]
옵션

-p : 프로세스 ID 표시 (Pid)

-n : 프로세스 ID를 정렬해서 표시 (Numeric order)

-a : 명령행 인자를 포함한 정보 표시 (All)

-h : 현재 프로세스와 부모 프로세스 강조 (Highlight)


jobs

작업이 중지된 상태, 백그라운드로 진행 중인 상태 등을 표시한다.

$ jobs [옵션] [작업번호]

출력된 목록에서 + 는 현재 작업 실행, - 는 앞으로 실행될 대기 상태 작업을 나타낸다.

옵션

-l : 프로세스 그룹 ID를 state 필드 앞에 표시

-n : 그룹 중 대표 프로세스 ID를 표시 (No1 pid)

-p : 프로세스 ID를 한 행씩 표시 (Pid)


bg / fg

현재 실행 중인 프로세스를 백그라운드 / 포그라운드로 전환한다.

$ bg %작업번호
$ bg 작업번호
$ fg %작업번호
$ fg 작업번호
  • 포그라운드에서 백그라운드로 전환 시 먼저 실행 중인 작업을 일시 중지 (Ctrl+Z) 후 bg 명령을 수행한다.
  • 명령어를 실행할 때 백그라운드 작업으로 실행하고자 할 때는 명령어 뒤에 & 를 붙여준다.
  • 포그라운드 작업을 종료하려면 Ctrl+C 를 입력한다.

kill

프로세스를 종료시킨다.

$ kill [옵션] [시그널번호 또는 시그널이름] [PID 또는 %작업번호]
옵션

-l : 시그널 종류 나열 (List)

-s 시그널번호/시그널명 : 전달할 시그널의 종류를 지정 (Signal)

-1 : -HUP, 프로세스를 재시작

-9 : -KILL, 프로세스를 강제로 종료


killall

같은 데몬의 여러 프로세스를 한 번에 종료시킨다.

$ killall [옵션] 프로세스명
옵션

-g : 그룹을 지정하여 프로세스를 종료 (Group)

-i : 프로세스 종료 전 확인 메시지 표시 (Interact)

-l : 시그널 목록 표시 (List)

-v : 상세 정보 표시 (Verbose)


nice

프로세스 사이의 우선순위를 확인하고 우선순위를 변경할 수 있는 명령어이다.

$ nice [옵션] 프로세스명
  • 조정할 수 있는 NI 값의 범위는 -20 (가장 높은 우선권) ~ 19이다.

  • 디폴트는 10을 사용한다.

  • 일반 사용자는 nice 값을 증가만 가능하며, root 유저는 nice 값을 감소시킬 수 있다.

옵션

-n 조정수치 : 명령의 우선권에 조정수치를 더한다

-조정수치 : 명령의 우선권에 조정수치를 더한다

--adjustment 조정수치 : 명령의 우선권에 조정수치를 더한다


renice

이미 실행중인 프로세스의 우선순위를 변경한다.

프로세스 소유자와 루트 권한자만이 명령을 내릴 수 있다.

$ renice [옵션] NI값 PID
옵션

-p : 프로세스 ID 지정 (Pid)

-u : 사용자명 지정 (User)

-g : 프로세스의 GID 지정 (Gid)


top

리눅스 시스템의 운영 상태를 실시간으로 모니터링하거나 프로세스 상태를 확인할 수 있다.

$ top [옵션] [PID]
  • 기본으로 5초에 1번씩 실시간으로 갱신된다.
  • top 이 실행된 상태에서 다양한 명령을 입력하여 프로세스의 상태를 출력하거나 제어할 수 있다.
    • h / ?
      • 도움말 확인
    • t
      • CPU 와 프로세스 정보를 토글함
    • i
      • 좀비 프로세스 정보를 토글함
    • n 수치
      • 지정된 개수만큼의 프로세스를 화면에 표시
    • r 조정치
      • renice 값을 변경
    • k PID
      • 지정된 PID를 종료함
    • q / Ctrl+C
      • top 실행 종료
옵션

-d 시간 : 실시간 화면 출력 갱신 시간 (Dimension)

-p PID : 모니터할 프로세스 ID 지정 (Pid)


nohup

프로세스가 중단되지 않고 백그라운드로 작업을 수행할 수 있게 한다.

사용자가 로그아웃하거나 작업 중인 터미널 창이 닫혀도 계속 작업할 수 있도록 한다.

백그라운드로 실행될 수 있도록 명령행 뒤에 & 를 명시한다.

$ nohup 명령문 &
  • 실행 중인 프로세서의 표준 출력 결과는 nohup.out 이라는 파일을 생성하여 기록한다.
  • 만일 작업 디렉터리에 쓰기가 불가능할 경우 $HOME/nohup.out 파일을 생성하여 기록한다.

스케줄링과 cron

주기적으로 반복되는 일을 자동적으로 실행될 수 있도록 설정한다.

스케줄링 데몬은 crond 이며, 관련 파일은 /etc/crontab 이다.

$ crontab [옵션] 파일명
$ echo "0 4 * * 2,4 /etc/backup.sh" >> /etc/crontab
옵션

-l : crontab 에 설정된 내용 출력 (List)

-e : crontab 을 작성하거나 수정 (Edit)

-r : crontab 내용 삭제 (Remove)

-u : 특정 사용자의 일정 수정 (User)


저작자표시 (새창열림)

'공부한 이야기 > 리눅스' 카테고리의 다른 글

리눅스 - 주변기기  (0) 2022.08.21
리눅스 - 소프트웨어 관리  (0) 2022.08.21
리눅스 - 에디터  (0) 2022.08.21
리눅스 - Shell  (0) 2022.08.20
리눅스 - 파일시스템 운용  (0) 2022.08.20
    '공부한 이야기/리눅스' 카테고리의 다른 글
    • 리눅스 - 소프트웨어 관리
    • 리눅스 - 에디터
    • 리눅스 - Shell
    • 리눅스 - 파일시스템 운용
    HotFoxy
    HotFoxy
    1년 동안의 고군분투 전직 이야기! ..가 완료되어, 게임개발자로 살아남는 이야기!

    티스토리툴바