Post

06. 프로세스 다루기

06. 프로세스 다루기

1. 프로세스의 개념

프로세스는 현재 실행 중인 프로그램으로, 리눅스의 운영에 필요한 다양한 기능을 수행하는 시스템 프로세스와 사용자들이 실행하는 사용자 프로세스로 나뉜다. 프로세스는 부모-자식 관계를 가지며, 각 프로세스는 고유한 번호인 PID(Process Identification Number)를 부여받는다.


2. 프로세스의 종류

  • 데몬 프로세스: 리눅스 커널에 의해 실행되고 특정 서비스를 제공하는 프로세스이다.
  • 부모 프로세스: 자식 프로세스를 만드는 프로세스이다.
  • 자식 프로세스: 부모 프로세스에 의해 만들어지는 프로세스이다.
  • 고아 프로세스: 자식 프로세스가 아직 실행 중인데 부모 프로세스가 먼저 종료되면 자식 프로세스는 고아 프로세스가 된다.
  • 좀비 프로세스: 이미 사용 중인 모든 자원을 반납했지만 부모 프로세스로부터 작업 종료에 대한 승인을 받지 못한 상태의 프로세스이다.

3. 프로세스 관리 명령

프로세스 정보 검색 명령: ps

  • 기능: 현재 실행 중인 프로세스에 대한 정보를 출력한다.
  • 형식: ps [옵션]
  • SVR4 옵션
    • -e: 시스템에서 실행 중인 모든 프로세스의 정보를 출력한다.
    • -f: 프로세스에 대한 자세한 정보를 출력한다.
    • -l: 실행 우선순위 값인 nice를 포함하여 출력한다.
    • -u uid: 특정 사용자에 대한 모든 프로세스의 정보를 출력한다.
    • -p pid: pid로 지정한 특정 프로레스의 정보를 출력한다.
  • BSD 옵션
    • a: 터미널에서 실행시킨 프로세스의 정보를 출력한다.
    • u: 프로세스 소유자 이름, CPU 사용량, 메모리 사용량 등 상세 정보를 출력한다.
    • x: 터미널과 연계되지 않은 프로세스의 정보도 포함하여 출력한다.

pgrep 명령으로 검색하기

  • 기능: 지정한 패턴과 일치하는 프로세스의 정보를 출력한다.
  • 형식: pgrep [옵션] [패턴]
  • 옵션
    • -x: 패턴과 정확히 일치하는 프로세스의 정보를 출력한다.
    • -u 사용자이름 : 특정 사용자에 대한 모든 프로세스를 출력한다.
    • -l: PID와 프로세스 이름을 출력한다.
    • -t term : 특정 단말기와 관련된 프로세스의 정보를 출력한다.

프로세스 종료하기: kill

  • 기능: 프로세스를 종료한다. (시그널을 프로세스에 보낸다.)
  • 형식: kill [-시그널] PID
  • 시그널
    • 9: 프로세스를 강제로 종료한다.

프로세스 종료하기: pkill

  • 프로세스의 명령 이름(CMD)으로 프로세스를 찾아 종료한다.
  • 예시: pkill man

프로세스 우선순위 조정하기: nice

  • 기능: 프로세스의 실행 우선 순위를 조정한다.
  • 우선순위: 19(가장 낮음) ~ -20(가장 높음)
  • 형식: nice [옵션] [명령]
  • 옵션( -n 숫자 ): 지정한 숫자로 nice 값을 조정한다.
  • 예시: nice -n 10 ls

4. 작업 제어

  • 포그라운드 작업: 사용자가 명령을 입력한 후 결과가 출력될 때까지 기다려야 한다.
  • 백그라운드 작업: 명령의 처리와 관계없이 곧바로 사용자가 다른 작업을 계속할 수 있다. 백그라운드 방식은 명령의 마지막에 &기호를 추가한다.
  • 작업 관리 명령
    • jobs: 백그라운드 작업 목록을 출력한다.
    • fg %작업번호: 해당 작업을 포그라운드 작업으로 전환한다.
    • bg %작업번호: 해당 작업을 백그라운드 작업으로 전환한다.
    • Ctrl + Z: 포그라운드 작업을 잠시 중단한다.
    • kill %작업번호: 해당 작업을 종료한다.
    • nohup: 로그아웃한 후에도 백그라운드 작업을 계속 실행한다.
  • 시그널: 시그널은 시스템에 예기치 않은 상황이 발생했을 때 프로세스에 보내는 간단한 메시지이다. 시그널은 전달하려는 메시지를 나타내는 미리 정의된 번호를 사용하며, 각각의 고유한 이름도 가지고 있다. 명령을 사용하여 프로세스에 시그널을 보낼 때는 kill 명령을 사용한다.
This post is licensed under CC BY 4.0 by the author.