바닥코딩

리눅스 프로세스 본문

네트워크 & 리눅스/리눅스

리눅스 프로세스

개발공부개발공부 2023. 7. 19. 10:15

일반적으로 프로세스는 실행중인 프로그램을 의미 합니다. 그리고 실행 중인 프로그램을 관리하는 것은 운영체제(OS) 의 중요한 역할입니다. 이번 포스트 에서는 리눅스에서 프로세스가 어떻게 관리되고 작동 되는지 간단하게 알아 보겠습니다.

 

리눅스 프로세스 동작 구조

 

 먼저 개발자가 프로그램을 개발하면 해당 프로그램은 코드로 구성되어 있습니다. 리눅스 에서는 명령어를 통해 이 코드를 실행하게 됐을 때 프로세스를 생성해  실행 중인 프로그램을 관리 합니다. 이러하 프로세스를 여러개 그룹화 하여 관리 하는 것도 가능 한데 이것을 job 이라고 지칭합니다.

 리눅스에서는 프로세스에 고유 아이디인 PID 를 부여합니다.  서버관리자는 PID를 통해  프로세스의 동작상태와 실행/종료 와 관련된  기능을 제공받기 떄문에  더욱 편리한 서버 관리가 가능해집니다.

 

리눅스 부모&자식 프로세스

  리눅스 프로세스는 부모 자식 관계를 가질 수 있습니다. 프로세스에 부모 자식 관계는 특정 프로세스가 선행이 되어야 실행 될 수 있는 프로세스가 존재할 경우 성립됩니다.  부모&자식 프로세스에 대한 자세한 내용은 아래와 같습니다 .

부모 프로세스 

  • 선행 프로세스라고도 하며, 자식 프로세스를 생성할 수 있음
  • fork() 함수를 통해 자식 프로세스 생성
  • 부모 프로세스는 여러 자식 프로세스를  가질 수 있음
  • 자식 프로세스의 환경이 변경되어도 부모 프로세스에 영향을 주지 않음

자식 프로세스

  • 자식 프로세스는 부모 프로세스가 처리 중인 파일 등을 공유
  • 프로그램 단계에서는 부모 프로세스의 복사로 부모와 교신하며 프로세스를 진행

 

포그라운드 VS 백그라운드

 리눅스에서 프로세스는  포그라운드 또는 백그라운드 방식으로 실행이 됩니다. 포그라운드 방식은 키보드 입력을 받아서 동작하는 방식으로 실행되면 다른 작업을 처리할 수 없습니다. 백그라운드 방식은 사용자와의 대화 없이 실행되는 작업 방식입니다.

리눅스에서 포그라운드 방식으로 작업을 실행하면 다른 작업을 실행할 수 없고, 작업이 끝날때까지 대기합니다. 백그라운드 방식은 명령어 뒤에 &를 붙여서 실행하고, 다른 명령어를 추가적으로 입력할 수 있습니다.

아래는  포그라운드와 백그라운드 프로세스 실행 관련 예제입니다.

# 포그라운드 방식 
$ sample.sh

# 백그라운드 방식 -- &추가 
$ sample.sh &

# nohup 커맨드(no hang up)
$ nohup sample.sh &