프로세스
프로세스는 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
실행 종료
- h / ?
옵션
-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 |