본문 바로가기
IT/리눅스

프로세스란?

by 노오-력 2023. 1. 14.

프로세스는 '실행 중인 프로그램의 단위' 이다.

 

 

프로그램과 프로세스의 차이

일련의 작업을 컴퓨터에 실행시키는 방법이 적힌 파일 또는 실행 내용이 프로그램이다.

프로그램을 실행해서 독립적으로 동작하는 하나하나를 프로세스라고 한다.

OS는 명령어를 실행할 때 프로세스를 생성하고 프로세스 ID 라는 번호로 구분해서 관리한다.

프로그램 실행 명령어를 두 번 실행하면 프로세스도 두 개 생성된다.

 

프로세스는 명령어를 실행하면 생성되고 프로그램 처리가 모두 끝나면 삭제된다.

프로세스가 생성될 때 프로세스 ID 이외에도 프로세스를 생성한 사용자, 프로세스 우선순위, 실행 시작 시각 등 몇 가지 정보를 컴퓨터에 저장한다.

OS는 이런 정보로 프로세스를 관리하는데, 프로세스 정보는 ps 명령어로 확인가능하다.

ps 명령어에 auxw 옵션을 사용하면 현재 동작하는 모든 프로세스를 표시한다.

 

적은 CPU 개수로 수많은 프로세스를 실행하고 있는 이유는리눅스가 멀티태스킹 오퍼레이팅 시스템이기 때문이다.엄밀히 따지면 모든 프로세스가 동시에 실행되는것은 아니다.멀티태스킹OS가 여러 프로세스를 고속으로 전환하면 실행해서 동시에 실행하는 듯이 보이는 것이다.

어떤 프로세스를 어떤 순서를 전환할지 정하는 것은 스케줄링이라고 부른다.

스케줄링은 kill 명령어로 프로세스에 보내는 시그널이나 nice 명령어로 설정한 우선 순위 등에 따라 조절한다.

 

프로세스에는 부모-자식 관계가 존재한다.

보통 프로세스는 다른 프로세스를 통해서 실행되는데,

실행하는 쪽이 부모 프로세스, 실행된 쪽이 자식 프로세스가 된다.

프로세스 상속 관계는 ps 명령어에 l 이나 f 옵션을 사용해서 확인 가능하다.

 

$ ps lf

 

ps lf의 부모 프로세스ID(PPID)는 1341이고 해당하는 프로세스는 bash(쉘)이다.

 

참고로 ps 명령어에 alxf 옵션으로 모든프로세스의 상속 관계를 확인할 수 있다.

 

 

부모 프로세스는 자식 프로세스 동작에 일부 영향을준다.

예를 들어 부모 프로세스를 종료하면 모든 자식 프로세스도 동시에 종료된다.

 

 

스레드와 프로세스 관계

스레드는 프로그램의 처리 단위이다.

자식 프로세스와 마찬가지로 어떤 프로세스에서 생성되지만, 스레드를 생성한 부모 프로세스나 같은 프로세스 안에서 병렬로 동작하는 스레드끼리 자원을 공유할 수 있어서 빠르고 효율적인 처리가 가능하다.

병렬로 동작하는 스레드를 멀티 스레드라고부른다.

 

OS 입장에서는 스레드와 프로세스를 같이 취급하므로 모두 스케줄링 대상이다.

ps 명령어에 m 옵션을 사용하면 스레드 관련 정보 확인이 가능하다.

 

 

 

 

 

 

리눅스는 여러 사용자가 동시에 로그인해 사용 할 수 있는 시스템이다.

따라서 자원을 혼자 많이 소모하면 다른 사용자에게도 영향을 주기 때문에 각 사용자들이 프로세스 관리를 의식할 필요가 있다.

슈퍼유저는 모든 프로세스에 접근할 수 있고

일반 사용자는 자신이 생성한 프로세스를 kill 명령어 등으로 제어가 가능하다.

 

 

 

 

특별한 프로세스: 데몬

일반 프로세스는 명령어를 실행할 때 생성되고

프로그램을 종료하면 삭제되지만 때로는 항상 동작하는 프로세스도 필요하다.

늘 동작하는 프로세스를 데몬(daemon)이라 부르며

리눅스를 시작할 때 생성해서 일부러 끄지 않는 한 셧다운할 때까지 계속 동작한다.