1. 리눅스 프로세스
- 이번 포스팅에서는 리눅스에서 사용하는 프로세스에 대해서 알아보자.
a) 프로세스와 바이너리
▶ 바이너리
- 코드 이미지 또는 실행파일
- 저장매체에 보관되어있는 파일
▶ 프로세스
- 실행중인 프로그램 (메모리에 올라간 프로그램)
- 가상 메모리 및 물리 메모리 정보 (상태 정보, 실행 중일 때만 알 수 있는 정보, 대표적으로 PCB)
- 시스템 리소스 정보 (사용중인 시스템 자원에 대한 정보)
- 스케쥴링 단위 (프로그램을 실행시키는 단위)
b) 리눅스는 다양한 프로세스의 실행 환경을 제공한다.
▶ 유닉스의 철학
- 여러 프로그램이 각자의 일을 하며 서로 유기적으로 동작하여 전체 시스템이 움직이는 모델
- 이처럼 리눅스(유닉스)는 다양한 프로세스를 기반으로 작동하기 때문에, 그만큼 프로세스를 통제하고 조작하는 것이 중요하다.
- 리눅스의 백그라운드에 존재하는 다양한 프로세스를 조작하기 위한 명령어를 알아보자.
2. foreground process
a) foreground process
- 터미널에서 shell을 통해 입력되는 명령어는 전부 foreground process에서 동작하는 명령어다.
- 그러므로 하나의 명령어와 옵션만을 사용할 수 있지, 다양한 명령어를 조합하여 프로세스를 조작하는 방식은 지원하지 않는다.
b) foreground process의 특징
- shell에서 프로세스를 실행한 후, 프로세스가 종료될 때까지 사용자는 다른 입력을 하지 못한다.(동기적 실행)
- 하지만, 현대의 CPU속도가 매우 빠르기 때문에 이 부분에 대해 체감하기는 어렵다.
- 아래의 예시를 수행하면서 경험해보자.
sudo apt-get install gcc
# GNU프로젝트에서 만든 C 언어 컴파일러 설치 명령어
- sudo를 사용한 이유는 apt-get 명령어가 시스템을 조작하는 명령어기 때문이다.
- apt-get은 현재 시스템에 있는 패키지 또는 프로그램을 설치하거나 제거할 때 사용하는 명령어다.
- 제 c 언어를 사용하여 무한루프 프로그램을 만들어 볼 것이다.
vi loop.c
# c프로그램 파일을 생성한다.
#include <stdio.h>
int main()
{
int i = 1;
while (i == 1) {
}
return 0;
}
# 무한루프를 도는 C언어 프로그램이다.
gcc loop.c -o loop
# 실행파일을 생성한다. 실행파일 이름은 loop로 짓는다.
./loop
# 현재 위치에서 loop 실행파일을 실행한다는 명령어
- 무한 루프 프로그램이 끝날 때까지 어떤 명령어도 실행할 수 없는 상태가 된다.
- 이것이 foreground 프로세스를 실행할 때, 수행 작업이 끝날 때까지 다른 작업을 할 수 없는 상태다.
- 강제적으로 프로그램을 종료하기 위해서는 컨트롤 + c 를 누른다.
3. background process
- 앞서 foreground 프로세스에 대해서 배우면서, 동기적 수행의 불편함에 대해서 알아보았다.
- 이러한 불편함을 해결하기 위해서 등장한 기술이 background process 이다.
a) background process의 특징
- foreground와 다르게, 수행중인 프로세스의 결과와 상관없이 다른 작업을 수행할 수 있도록 한다.
- shell에서 프로세스를 실행하면, 맨 뒤에 &을 붙여서 다른 작업을 수행할 수 있다.
- 다음 예시를 살펴보자.
./loop &
- background 에서는 무한루프 프로그램이 수행중에 있다.
- 하지만, 다른 작업을 수행할 수 있는 것을 확인할 수 있다.
'컴퓨터공학기초 개념 > 시스템 프로그래밍' 카테고리의 다른 글
11. shell - 리눅스 파일 시스템 (0) | 2021.09.09 |
---|---|
10. shell - 프로세스 관리 및 제어 (0) | 2021.09.09 |
8. shell - 리다이렉트와 파이프 (0) | 2021.09.07 |
7. shell - 파일 권한 및 관리(2) (0) | 2021.09.07 |
6. shell - 파일 권한 및 관리(1) (0) | 2021.09.07 |
댓글