Linux

[Linux] Process - 2 (PID)

개발로 먹고 살자 2022. 8. 8. 11:28

이번에는 프로세스에 대해 좀 더 자세히 알아보도록 하겠다.

 

사용자 계정에서 사용자를 식별하는 번호로 UID를 사용하는 것처럼

시스템에서는 프로세스를 식별하는데 프로세스 ID(PID) 라는 것을 사용한다.

 

 

PID는 0번부터 시작을 한다.

0번 프로세스는 스케줄러로 프로세스에 CPU 시간을 할당하는 역할을 한다.

또한 0번은 커널의 일부분이기 때문에 별도의 실행 파일이 없다.

 

1번 프로세스는 init이다. 프로세스가 새로 생성될 때마다

기존 PID와 중복되지 않은 번호가 할당된다.

 

 

파일을 실행할 때 현재 어떠한 PID를 가지는지 한 번 확인해보겠다.

 

getpid()

getpid() 함수를 통해 호출한 프로세스의 PID를 확인할 수 있다.

 

위의 파일을 실행해보니 현재 PID 값이 나온다.

또한 계속 실행할 경우 다음 PID 값이 나오는 것을 볼 수 있다.

 

 

getppid()

getpid() 함수가 현재 프로세스의 PID를 리턴한다면

getppid()는 부모 프로세스를 리턴한다.

 

0번 프로세스를 제외한 모든 프로세스에는 자신을 생성한 프로세스가 있다.

이를 부모 프로세스라고한다. 부모 프로세스 또한 PID가 존재한다.

부모 프로세스의 PID를 PPID(Parent Process)라고 한다.

 

 

위의 파일을 실행시켜 보면 현재 프로세스의 PID와 PPID를 확인할 수 있다.

현재 프로세스가 57662 이며, 부모 프로세스는 57267이다.

 

 

PID가 57267인 프로세스는 무엇일까?

ps 명령으로 현재 위치에서 실행 중인 프로세스를 볼 수 있다.

확인을 해보니 PID 57267은 bash(배시 쉘)이다.

 

리눅스에서 쉘(shell) 이란 운영체제 커널과 사용자 사이를 이어주는 역할을 하는데

사용자가 입력한 명령을 해석 후 커널에 그 해석한 명령을 요청해준다.

 

쉘을 종류는 다양하지만 리눅스 기본 쉘이 bash이다.

한마디로 우리가 실행한 파일은 bash가 요청하여 만든 프로세스인 것이다.

 

우리가 흔히 사용하는 ls, cd, pwd 등이 쉘이 제공하는 명령어이다.

 

 

사용자가 프롬프트에서 실행 파일을 실행하면 쉘이 자식 프로세스를 생성하고

이 프로세스가 실행 파일을 실행하도록 한다.

그렇기 때문에 bash가 부모 프로세스가 되는 것이다.

 

 

https://gjehdalshh.tistory.com/151

 

[Linux] Process - 3 (프로세스 생성과 실행)

리눅스에서 프로세스는 사용자가 직접 명령어로 프로그램을 실행하여 생성하는 경우도 있지만 프로그램 안에서 다른 프로그램을 실행해 생성하는 경우도 존재한다. 이렇게 프로그램 안에서 다

gjehdalshh.tistory.com