LINUX/생활코딩 강의 정리

[생활코딩 리눅스 강의 정리] 섹션 5. 프로세스와 실행

은재정 2022. 8. 24. 18:06

해당 글은 생활 코딩 이고잉님의 강의를 듣고 일부만을 정리한 글입니다.


컴퓨터의 구조

컴퓨터는 크게

  1. 프로세서(CPU, GPU)
  2. 메모리(RAM)
  3. 스토리지(SSD, HDD)

세 가지로 구성되어 있다. HDD, SSD 등의 스토리지와 메모리의 공통점은 데이터를 저장한다는 것이다. 다만 HDD, SSD는 속도가 느리고 저장공간이 크고 메모리는 속도가 빠르고 저장공간이 작다는 것이다.

 

프로그램은 사용되지 않을 때 스토리지에 저장되어 있다가 메모리에 저장이 되어 프로세서에 의해 실행된다. 즉, 프로그램은 하드웨어에 기록된 명령어이고 프로세스(Process)는 프로세서에 의해 실행되고 있는 프로그램을 의미한다.

 

프로세스 모니터링(ps, top, htop)

ps

 

프로세스 리스트를 보여주는 명령이다. 백그라운드에서 실행되는 수많은 프로세스까지 보고 싶다면 ps aux를 입력한다.

ps
ps aux
# apache 프로세스 보기
ps aux | grep apache

 

ps 명령어를 통해 프로세스의 아이디인 PID(Process ID)를 볼 수 있다. 이 PID를 알면 sudo kill 명령을 통해 강제로 프로세스를 종료시킬수도 있다.

 

top, htop

 

PID, CPU%, MEM% 등의 헤더를 클릭해서 해당 값 기준으로 정렬을 할 수 있다. 예를 들어 MEM%를 클릭하면 사용하고 있는 메모리 오름차순/내림차순으로 정렬이 된다.

 

 

TIME+은 프로세스가 실행된 시간, Command는 프로세스를 실행한 명령, RES는 프로세스가 사용하는 물리 메모리의 크기, MEM%은 프로세스가 사용하는 물리 메모리의 퍼센티지, VIRT는 프로세스의 가상 메모리 크기를 의미한다.

 

 

Load average는 프로세서 점유율을 뜻한다. 뒤에 나오는 세 숫자는 1분간의 프로세서 점유율, 5분간의 프로세서 점유율, 10분간의 프로세서 점유율이다. 싱글 코어 CPU일때 1.0이면 사용률이 100%이고 쿼드 쿼어라면 4.0이 100%이다. 위의 사진을 예시로 들자면 5분동안 평균을 내보았을 때 코어가 1개일 때 0.18개의 프로세스가 대기하고 있음을 뜻한다.

 

백그라운드 실행

백그라운드 실행은 멀티태스킹에서 유용하게 쓰인다. Ctrl + Z 또는 커맨드뒤에 &를 붙여서 백그라운드 실행을 할 수 있다.

 

 

+ 기호는 fg(foreground)를 실행했을 때 백그라운드에서 포그라운드로 나오는 프로그램을 나타내는 기호이고 - 기호는 +가 표시된 프로그램의 다음 프로그램을 나타낸다.

 

일반적으로 시간이 많이 걸리는 프로그램을 수행할 때 백그라운드에서 실행한다.

# 모든 하위 디렉토리를 보여줌, 백그라운드 실행
ls -alR > result.txt 2> error.log &

 

항상 실행 - 데몬(daemon)

데몬(daemon)이란 시스템의 서비스에 요청에 응답하기 위해 오랫동안 실행중인 백그라운드 프로세스를 뜻한다. 대표적인 예시로 웹 서버가 있다. /etc/init.d 디렉토리에는 데몬의 목적을 가지고 있는 프로그램들이 위치한다.

 

sudo apt-get install apache2
ls /etc/init.d/

 

데몬 프로그램을 키고 끄기 위한 절차는 일반 프로그램과 다르다. sudo service로 시작한다. start, stop 명령으로 시작과 종료를 할 수 있다.

sudo service apache2 start
ps aux | grep apache
sudo service apache2 stop

 

또한 데몬은 컴퓨터가 부팅될 때 자동으로 켜져할 필요가 있을 수 있다. /etc 디렉토리에 있는 rc3.d 디렉토리는 CLI 방식으로 구동할 때, rc5.d 디렉토리는 GUI 방식으로 구동할 때 자동으로 켜지는 데몬 프로그램을 가지고 있다.

 

 

S로 시작하는 프로그램은 컴퓨터가 부팅될 때 자동으로 실행되며, K로 시작하는 프로그램은 실행되지 않는다. 뒤에 있는 01과 같은 숫자는 우선순위이다. 이를 이용해서 rc3.d 디렉토리에 자동으로 실행되길 원하는 데몬 프로그램의 심볼릭 링크를 생성하면 된다.

 

정기적 실행 - cron

cron은 정기적으로 명령을 실행하기 위한 소프트웨어이다. crontab -e 명령을 통해 정기적으로 실행되길 원하는 작업을 정의한다. 

 

crontab expression

 

예를 들어, 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/ 명령은 매주 월요일 오전 5시에 /var/backups/home.tgz 파일을 /home 디렉토리에 압축을 풀게 하는 명령이다.

 

crontab -e
# 1분에 한 번씩 시간 기록
*/1 * * * * date >> date.log

 

쉘을 시작할 때 실행 - .bashrc

쉘의 스타트업 스크립트를 통해 접속했을 때 쉘에서 특정한 명령어가 실행되도록 할 수 있다. 스타트업 스크립트에는 .bashrc, .bash_profile 등이 있다.

 

주로 사용되는 문법중엔 alias가 있다.

alias l='ls -al'
# ls -al과 동일한 결과
l

 

bash 쉘은 쉘에 처음 로그인했을 때 .bashrc 파일을 실행한다. .bashrc 파일에 환경 변수 $PATH를 설정하여 프로그램의 실행을 간편하게 할 수 있다.