프로세스의 개념
- 프로세스는 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 |