Linux - 프로세스 - 1 (정의)

2021. 8. 16. 17:44Linux

이번 시간에는 프로세스란 무엇인가에 대해 알아보겠습니다.

프로세스 : 실행중인 프로그램을 의미합니다. 프로그램을 실행하면 해당 프로그램은 메모리 상에서 실행됩니다 저는 지금부터 이를 메모리상에 올라간다고 표현하겠습니다.

프로그램 : 하드 디스크 또는 SSD와 같은 보조기억장치에 저장되어 있는 실행 파일이며 이를 실행시 메모리상에 올라가게 되는 것입니다.

프로세서 : 프로세스를 처리해주는 중앙처리장치(CPU)를 의미합니다

다중프로세서시스템 : 컴퓨터에 CPU가 여러개 달린 시스템을 말합니다

 

ps 명령어를 통해 현재 시스템에서 실행중인 프로그램(프로세서)들을 확인 할 수 있습니다.

 

 

PID : 프로세스 번호, 모든 프로세스는 프로세스 번호를 할당 받습니다

TTY : 프로세스가 연결된 콘솔을 표시합니다. 제가 사용하는 리눅스 GUI 환경은 pts 콘솔을 사용합니다. /0은 현재 몇번째 터미널인지 알려줍니다. 

터미널을 여러개 동시에 킨후 확인 해 보겠습니다.

 

 

전에 Ctrl + Alt + F(1~6)을 사용해서 터미널 전환할 수 있다는 것을 배웠습니다. F1은 현재 화면이므로 F2, F3로 접속후 tty를 확인 해보겠습니다.

 

 

tty가 2번부터 시작하는 것을 볼 수 있습니다. 그럼 1번은 어딜까요? 당연히 1번은 F1입니다. init 3 명령어는 CUI 환경으로 전환 시킬 수 있는 명령어입니다. init 5 명령어는 반대로 GUI 환경으로 전환 시키는 명령어이비다. run level에 대한 공부는 다음에 자세히 하도록 하겠습니다.

 

 

init 명령어는 F1 터미널에서만 적용이 됩니다. F(2~6)터미널에서 init 3, init 5 명령어를 사용해도 F1 터미널에 적용이 됩니다. F(2~6) CUI 터미널에서 xwindows 환경으로 전환하기 위해서는 init 5 명령어가 아닌 startx 명령어를 사용하면 됩니다. startx 명령어는 F1 터미널에서도 사용할 수 있습니다. F1의 GUI 한경에서 init 3로 CUI 환경으로 전환 했다가 init 5 명령어 혹은 startx 명령어로 GUI 환경으로 전환 할 수 있습니다

 

init 5와 startx 명령어를 사용했을때 둘다 GUI 환경으로 전환이 되었지만 결과가 미세하게 다른 것을 확인 할 수 있을 것입니다. init 5 부팅이 기존 GUI 부팅이고 startx는 새 GUI 부팅이라고 생각하시면 됩니다.

F1 터미널에서 startx로 GUI 환경으로 전환하면 F(2~6) 터미널이 안열리게 됩니다. 이럴 경우 재 부팅을 하면 원래 환경으로 돌아옵니다.

 

 

TIME : 프로세스에서 사용한 CPU 시간입니다. 

CMD : 명령어,  실행중인 프로그램명 이라고 생각하면 됩니다. 

 

 

옵션

e : 시스템에서 실행중인 모든 프로세스를 출력합니다

 

 

프로세스 번호 1번부터 방금 제가 실행한 프로세스까지 모두 조회가 되는 것을 확인 할 수 있습니다.

 

f : 프로세스의 상세 정보를 출력합니다

 

 

옵션 없이 ps를 사용했을 때와 비교해보면 UID, PPID, C, STIME 가 추가된것을 확인 할 수 있습니다. 

 

UID : 프로그램을 실행시킨 사용자입니다. 

PPID : 부모 프로세스 ID 입니다. 

C : CPU 사용률입니다

STIME : 프로세스 시작 시간입니다.

 

프로세스는 부모와 자식 관계를 가지고 있습니다. 아까 e 옵션으로 확인 한 PID 1번이 모든 프로세스의 부모 프로세스입니다. 즉 1번 프로세스를 제외하고는 모두 부모 프로세스를 가지고 있는 것입니다. 사실 2번 프로세스도 부모 프로세스가 없습니다. 이 둘의 역할은 무엇일까요? 리눅스 시스템을 부팅하면 PID 1번인 init 프로세스와 PID 2번인 kthreadd 프로세스가 차례로 실행이 됩니다. init 프로세스는 2번을 제외한 모든 프로세스의 부모 프로세스이고 kthreadd 프로세스는 모든 스레드의 부모 프로세스입니다. 현재 프로세스를 다루고 있기 때문에 스레드 공부는 다음에 다루도록 하겠습니다.

 

 

이제 직접 프로그램을 실행 해 보겠습니다.

 

 

bash는 현재 리눅스에서 사용중인 쉘입니다. 지금 bash 쉘에서 csh 쉘을 실행한뒤 ps -f 명령어를 실행 한것입니다. csh 쉘은 bash 쉘에서 실행 했기때문에 부모 프로세스는 bash 쉘입니다. ps -f 명령어는 csh 쉘 에서 실행 했기 때문에 부모 프로세스는 csh 쉘입니다. 이는 PID와 PPID를 통해 확인 해 볼 수 있습니다.

 

csh 쉘 PPID = bash 쉘 PID, ps -f PPID = csh 쉘 PID인 것을 볼 수 있습니다.

 

프로세스에는 크게 포그라운드 프로세스와 백그라운드 프로세스로 구분합니다. 포그라운드 프로세스는 우리가 쉘에서 명령어를 입력하면 바로바로 처리되는 프로세스들입니다. 처리 속도가 매우 느린 프로세스들은 백그라운드 프로세스로 실행하는 것이 바람직합니다. 너무 오래 걸리는 작업을 포그라운드로 처리 할 경우 그 동안 다른 작업을 할 수 없기 때문입니다.

 

예를 들어 ls -l 명령은 바로 조회하여 결과를 사용자한테 보여줍니다. vi 명령어 또한 사용자가 파일을 열거나 내용을 수정하는 듯 사용자가 원하는 작업을 바로바로 할 수 있습니다. 이러한 프로세스들은 보통 포그라운드 프로세스로 실행합니다.

 

하지만 sleep 명령어(입력한 시간만큼 대기)와 같이 작업이 오래 걸리는 명령어는 백그라운드 프로세스로 실행 합니다. 

 

 

100초 동안 대기 하라는 명령어 입니다. 이는 100초가 끝나기 전까지 다음 작업을 할 수 없는 것입니다. 이러한 경우 백그라운드로 실행시키는 것이 바람직합니다. 명령어 뒤에 &를 사용하면 백그라운드 프로세스로 실행 할 수 있습니다.

 

 

백그라운드로 실행시키자 [1] 3045가 나왔습니다. 3045번은 PID이고 [1]은 작업 번호입니다. 백그라운드로 실행되는 프로세스들은 작업 번호를 부여 받으며 이는 jobs 명령어로 학인 할 수 있습니다.

 

 

이번엔 백그라운드로 여러개 실행시켜 보겠습니다.

 

 

작업 번호 뒤에 +, - 가 붙어 있는 프로세스가 있는 것을 볼 수 있습니다. +는 가장 최근에 실행시킨 백그라운드 프로세스라는 의미이고 + 바로 직전, 즉 2번째로 최근에 실행시킨 백그라운드 프로세스라는 의미입니다. 이 두개 이외에는 아무것도 붙어 있지 않습니다.

 

오늘은 프로세스에 대해 간단하게 알아보았습니다. 다음 시간에는 프로세스의 종류, 삭제, 제거 방법에 대해 자세히 알아보겠습니다.

 

 

 

다음 내용

Linux - 프로세스 - 2 (종료, 종류, 제어)

'Linux' 카테고리의 다른 글

Linux - 프로세스 - 3 (데몬 프로세스)  (0) 2021.08.17
Linux - 프로세스 - 2 (종료, 종류, 제어)  (0) 2021.08.17
Linux - locate & find  (0) 2021.08.10
Linux - grep & 정규 표현식  (1) 2021.08.08
Linux - 마운트  (0) 2021.08.07