전공/리눅스시스템관리

[Linux] 리눅스 프로세스 관리

Campus Coder 2023. 4. 20. 01:00
728x90
반응형
더보기

프로세스

  • 프로세스: CPU에 의하여 수행되고 있는 프로그램
  • 셸: 사용자와의 대화를 위한 프로세스
  • ls 등 명령어: 사용자가 사용하는 명령어, 셸에 의하여 프로세스로 새롭게 생성
  • a.out아니 사용자 프로그램도 프로세스로 수정

 

  • 프로그램: 하드디스크에 저장되어 있는 수행가능 한 파일
  • 때로는 원시코드(C/C++)를 프로그램이라고 부르기도 함
  • 시스템 프로그래밍 관점에서 프로그램은 컴피일/링크가 끝난 executiable 파일을 뜻함

Programing, System Call

Signal Sources

 

프로세스

- 현재 시스템에서 실행 중인 프로그램

- 리눅스는 다중 프로세스 시스템으로 동시에 여러 프로세스 실행

 

프로세스의 부모-자식 관계

  • 리눅스에서 모든 프로세스는 부모-자식 관계
  • 부모프로세스가 자식프로세스 생성

 

부모 프로세스와 자식 프로세스의 관계

 

프로세스 번호

  • 각 프로세스는 고유한 번호를 가짐: PID
  • 1번 프로세스는 sysyem, 2번 프로세스는 kthreadd

 

프로세스의 종류

  • 데몬 프로세스: 특정 서비스를 제공하기 위해 존재, 리눅스 커널에 의해 실행
  • 고아 프로세스: 자식 프로세스가 아직 실행 중인데 부모 프로세스가 먼저 종료되면 자식 프로세스는 고아 프로세스가 됨
  • 좀비 프로세스
    • 자식 프로세스가 실행을 종료했는데도 프로세스 테이블 목록에 남아 있는 경우가 있는데 이러한 자식 프로세스를 좀비 프로세스라고 함
    • 좀비 프로세스가 증가하면 프로세스 테이블의 용량이 부족해서 정상적인 프로세스가 실행되지 않을 수도 있음

 

프로세스 관리 명령

ps

기능 - 현재 실행 중인 프로세스에 대한 정보 출력

형식 - ps [옵션]

옵션

<유닉스 옵션>

  • -e: 시스템에서 실행 중인 모든 프로세스의 정보 출력
  • -f: 프로세스 상세 정보 출력
  • -u uid: 특정 사용자에 대한 모든 프로세스의 정보 출력
  • -p pid: pid로 지정한 특정 프로세스의 정보를 출력

 

<BSD 옵션>

  • a: 터미널에서 실행시킨 프로세스의 정보를 출력
  • u: 프로세스 소유자 이름, CPU사용량, 메모리 사용량 등 상세 정보 출력
  • x: 시스템에서 실행 중인 모든 프로세스의 정보를 출력

 

<GNU 옵션>

  • --pid PID 목록: 목록으로 지정한 특정 PID 정보를 출력

 

pgrep

기능 - 지정한 패턴과 일치하는 프로세스의 정보를 출력

형식  pgrep [옵션] [패턴]

옵션

  • -x: 패턴과 정확히 일치하는 프로세스의 정보 출력
  • -n: 패턴을 포함하고 있는 가장 최근 프로세스의 정보를 출력
  • -u 사용자 이름: 특정 사용자에 대한 모든 프로세스 출력
  • -l: PID와 프로세스 이름을 출력
  • -t term: 특정 단말기와 관련된 프로세스의 정보 출력

 

시그널

  • 프로세스에 무언가 발생했을 알리는 간단한 메시지
  • 무엇이 발생했는지를 나타내는, 미리 정의된 상수를 사용
  • 시그널은 번호로 구분되면 이름을 가지고 있음
  • 시그널을 받은 프로세스는 기본적으로 종료

 

주요 시그널

시그널 번호 기본 처리 의미
SIGHUB 1 종료 터미널과 연결 끊겼을 때 발생
SIGINT 2 종료 인터럽트로 사용자가 Ctrl + c를 입력하면 발생
SIGQUIT 3 종료, 코어덤프 종료 신호로 사용자가 Ctrl + \을 입력하면 발생
SIGKILL 9 종료 이 시그널은 받은 프로세스는 무시할 수 없으며 강제로 종료
SIGALRM 14 종료 알람에 의해 발생
SIGTERM 15 종료 kill 명령이 보내는 기본 시그널

 

kill

기능 - 지정한 시그널을 프로세스에게 보냄

형식 - kill [-시그널] PID...

시그널

  • -2: 인터럽트 시그널을 보냄
  • -9: 프로세스 강제 종료
  • -15: 프로세스와 관련된 파일들을 정리하고 종료, 종료되지 않는 프로세스 존재 가능

 

pkill

- PID가 아니라 프로세스의 명령 이름(CMD)으로 프로세스를 찾아 종료

 

killall

- pkill 명령처럼 프로세스의 명령 이름(CMD)으로 프로세스를 찾아 종료

- 해당 이름으로 실행 중인 모든 프로세스를 한 번에 종료

- 해당 프로세스를 소유하고 있어야 함

 

 

top

- 현재 실행 중인 프로세스의 정보를 주기적으로 출력

- 프로세스의 자세한 요약 정보를 상단에 출력, 각 프로세스의 정보를 하단에 출력

 

프로세스 관리 도구

- GUI

- [프로그램 표시]-[시스템 감시]와 같은 순서로 동작

 

포그라운드, 백그라운드 프로세스와 작업제어

작업 제어

- 한 터미널에서 동시에 여러 프로세스를 실행하고 관리

- 작업 전환: 포그라운드 작업 <-> 백그라운드 작업 간 전환

- 작업 일시 중지: 작업을 잠시 중단

- 작업 종료: 프로세스 종료처럼 작업 종료

 

포그라운드 작업

- 사용자가 입력한 명령이 실행되어 결과가 출력될 때까지 기다리는 방식

 

백그라운드 작업

- 백그라운드 방식으로 명령을 실행하면 명령의 처리가 끝나는 것과 관계없이 곧바로 프롬프트가 출력되어 사용자가 다른 작업을 계속할 수 있음

- 한 터미널에서 여러 개의 프로세스를 동시에 실행 가능

- 백그라운드 방식으로 처리되는 프로세스를 백그라운드 프로세스라고 함

- 명령을 백그라운드로 실행하려면 명령의 마지막에 & 기호 추가

- 백그라운드로 작업을 실행하면 프롬프트가 바로 나옴

 

jobs

기능 - 백그라운드 작업을 모두 보여줌, 특정 번호를 지정하면 해당 작업의 정보만 보여줌

형식 - jobs [%작업 번호]

%작업번호

  • %번호: 해당 번호의 작업 정보 출력
  • %+ 또는 %%: 작업 순서가 +인 작업 정보 출력
  • %-: 작업 순서가 -인 작업 정보 출력

 

작업 전환하기

명령 기능
Crtl + z 또는 stop %작업 번호 포그라운드 작업을 중지
bg %작업 번호 작업 번호가 지시하는 작업을 백그라운드 작업으로 전환
fg %작업 번호 작업 번호가 지시하는 작업을 포그라운드 작업으로 전환

 

작업 종료하기

- 포그라운드 작업은 Ctral + c를 입력하면 대부분 종료

- PID를 검색하여 kill 명령으로 강제 종료

 

로그아웃 후에도 백그라운드 작업 계속 실행하기

- 백그라운드 작업을 실행한 터미널이 종료되거나 사용자가 로그아웃하면 실행 중이던 백그라운드 작업도 함께 종료

nohup

기능 - 로그아웃한 후에도 백그라운드 작업 계속 실행

형식 - nohup 명령&

 

작업 예약

at

기능 - 예약학 명령을 정해진 시간에 실행

형식 - at [옵션] [시간]

옵션

  • -l: 현재 실행 대기 중인 명령의 전체 목록 출력(atq 명령과 동일)
  • r 작업 번호: 현재 실행 대기 중인 명령 중 해당 작업 번호를 삭제(atrm과 동일) 
  • -m: 출력 결과가 없더라도 작업이 완료되면 사용자에게 메일로 알려줌
  • -f 파일: 표준 입력 대신 실행할 명령을 파일로 지정

 

Ctrl + d 입력으로 종료

 

at명령 설치하기

sudo apt install at

메일 설치

sudo apt install mailutils

 

at 작업 파일 확인

  • at로 생성된 작업 파일은 /var/spool/cron/atfobs 디렉터리에 저장
  • 작업 번호로 파일이 생성
  • atjobs 디렉터리의 내용은 daemon 그룹의 사용자만 확인할 수 있으므로 sudo 명령을 사용해야 함
sudo ls -l /varspool/cron/atjobs

 

atq

기능 - 현재 사용자의 등록된 작업 목록 출력, 슈퍼유저일 경우 모든 사용자의 작업 목록 출력

형식 - atq

 

atrm

기능 - 지정된 작업 번호의 작업을 삭제

형식 - atrm 작업 번호

 

at 명령 사용 제한하기

/etc/at.allow: at 명령의 사용이 허용된 사용자들 저장, 필요할 때 만들어야 함

/etc/at.dent: at 명령의 사용이 금지된 사용자들 저장, 기본적으로 파일이 있음

 

정해진 시간에 반복 실행

crontab

기능 - 사용자의 crontab 파일을 관리

형식 - crontab [-u 사용자ID] [옵션] [파일명]

옵션

  • -e: 사용자의 crontab 파일의 목록 출력
  • -l: crontab 파일의 목록을 출력
  • -r: crontab 파일을 삭제

 

crontab 파일 형식

  • crontab 명령으로 관리하는 파일은 사용자별로 생성
  • crontab 파일에는 여러 개의 작업을 저장할 수 있으며 한 행에 하나의 작업을 설정
  • crontab 파일의 한 행은 다음과 같이 여섯 항목으로 구성

요일은 0~6, 일~토 / 각 항목은 공백문자로 구분 / 항목의 값이 *이면 항목의 모든 값

 

crontab 파일 생성하고 편집하기

crontab -e

편집기로는 기본적으로 VISUAL 또는 EDITOR 환경 변수에 지정된 편집기를 사용

 

crontab 파일 확인하기

crontab -l

/var/spool/cron/crontabs 디렉터리에 사용자 이름으로 생성

 

crontab 파일 삭제하기

crontab -r

본인의 작업 삭제

시스템 관리자가 특정 사용자의 crontab을 삭제하려면 삭제하려는 사용자 ID를 지정

 

crontab 명령 사용 제한하기

/etc/cron.allow 파일이 있으면 이 파일에 지정된 사용자만 명령 사용 가능

/etc/cron.allow 파일이 없고 /etc/cron.deny 파일이 있으면 이 파일에 사용자 계정이 없어야 명령 사용 가능

/etc/cron.allow 파일과 /etc/cron.deny 파일이 모두 없으면 시스템 설정에 따라 시스템 관리자 또는 모든 사용자가 명령 사용 가능

두 파일 모두 존재 시 /etc/cron.allow 파일이 내용이 적용됨

728x90
반응형