리눅스의 프로세스 관리

한지용·2021년 4월 14일
0

Operating System

목록 보기
6/7

프로세스와 프로그램

Program - 저장 장치의 존재하는 하나의 파일을 의미하며 명령어 코드를 담고 있다
Process - 실행 중인 상태의 프로그램, 동일한 프로그램으로 여러 개의 프로세스를 생성할 수 있다. 각 프로세스를 프로그램의 인스턴스(instance)라고 한다

사용자가 프로세스를 생성하는 방법

  • shell prompt 상에서 프로그램을 지정하여 실행
  • 실행중인 사용자 프로세스를 통해서 프로그램을 실행

위의 두 가지 방법은 사실 동일하다.
shell prompt를 보여주고 있는 shell process가 이미 실행 중인 process이기 때문이다.
다른 점은 shell process는 로그인 과정에서 시스템에 의해 실행 된다는 것이다.

두개 이상의 프로세스를 동시에 생성하기

여러 개의 명령어 라인을 ';'(세미클론)을 사용하여 한줄에 입력한다

서로 협력하는 두 개 이상의 프로세스를 생성하기

파이프(|)를 사용하여 서로 협력하는 두개 이상의 프로세스를 생성할 수 있다.

ls \bin의 출력을 wc -w 의 입력으로 사용한다
wc: 문자 개수 출력/ -w: word ; -c :chracter

shell process

  • 시스템과 사용자의 사이에서 중간자 역할을 하는 프로세스
  • 시스템에 로그인 했을 때 가장 먼저 보게 되는 프로세스
  • 셸 프로세스의 소유주는 사용자이다

user process

  • 사용자가 shell prompt 상에서 명령어를 입력하여 생성한 프로세스

  • 사용자가 실행한 프로세스가 생성한 또 다른 프로세스

  • 프로세스의 주인은 이를 실행한 사용자이다

  • 프로그램 파일의 소유주와 프로세스 소유주는 서로 다를 수 있다
    ex) "ls" 명령은 "ls"라는 이름의 프로그램으로 저장되어 있고 이 프로그램(파일 형태)의 소유주는 관리자이다.

실행 중인 프로세스의 목록 확인하기

  • ps 명령을 사용하여 실행 중인 프로세스의 목록을 확인할 수 있다

    사용자가 고유주인 프로세스는 2개
    "bash"는 셸 프로세스이고, "ps -f"는 현재의 프로세스 목록을 보여주는 프로세스이다
    "ps -f" 프로세스는 출력을 보여주는 시점에서는 존재했으나, 츨력이 끝난 지금은 아마 종료되어 없을 것이다.

UID (User ID) : 프로세스 소유주의 사용자 식별 번호이다.
PID (Process ID) : 프로세스의 식별 번호이다.
PPID (Parent Process ID) : 부모 프로세스의 식별 번호이다.

모든 프로세스는 자신을 생성해준 부모 프로세스가 있다
단 한 개 예외가 있다(init 프로세스)

대부분의 사용자 프로세스는 셸 프로세스가 부모 프로세스가 된다

위 예시에서 "ps -f"의 PPID 는 "bash"의 PID와 같다

  • grep 명령으로 원하는 결과를 추출할 수 있다

  • ps -ef 는 전체 프로세스 확인하는 명령어
  • grep으로 부모 프로세스 PPID만 추출해 head -1 상위 한 줄만 표시
  • 최초의 프로세스인 init은 부모 프로세스가 없어 0 으로 출력된다

전면(Foreground)과 후면(Background)

  • 실행 중인 프로세스는 각각 전면 프로세스와 후면 프로세스로 나눌 수 있다
    전면이냐 후면이냐 하는 구분은 언제든지 바뀔 수 있다

전면 프로세스

  • 사용자의 표준 입력을 받을 수 있는 프로세스
  • 하나의 연결 상태에서 한개의 프로세스만 전면 프로세스가 될 수 있다

후면 프로세스

  • 실행 중이지만 사용자의 표준 입력을 받을 수 없는 프로세스
  • 하나의 연결 상태에서 전면 프로세스를 제외한 나머지 사용자 프로세스들이 모두 포함된다

0개의 댓글