Unix / Linux-프로세스 관리

이 장에서는 Unix의 프로세스 관리에 대해 자세히 설명합니다. Unix 시스템에서 프로그램을 실행하면 시스템은 해당 프로그램에 대한 특수 환경을 만듭니다. 이 환경에는 시스템에서 다른 프로그램이 실행되고 있지 않은 것처럼 시스템이 프로그램을 실행하는 데 필요한 모든 것이 포함되어 있습니다.

Unix에서 명령을 실행할 때마다 새 프로세스가 생성되거나 시작됩니다. 당신이 시도했을 때ls명령을 실행하여 디렉토리 내용을 나열하면 프로세스를 시작했습니다. 간단히 말해서 프로세스는 실행중인 프로그램의 인스턴스입니다.

운영 체제는 다음과 같은 5 자리 ID 번호를 통해 프로세스를 추적합니다. pid 아니면 그 process ID. 시스템의 각 프로세스에는 고유 한pid.

가능한 모든 숫자가 사용되고 다음 pid가 롤링되거나 다시 시작되기 때문에 Pids는 결국 반복됩니다. 어떤 시점에서든 Unix가 각 프로세스를 추적하는 데 사용하는 pid이기 때문에 동일한 pid를 가진 두 개의 프로세스가 시스템에 존재하지 않습니다.

프로세스 시작

프로세스를 시작할 때 (명령 실행) 실행할 수있는 두 가지 방법이 있습니다.

  • 포 그라운드 프로세스
  • 백그라운드 프로세스

포 그라운드 프로세스

기본적으로 시작하는 모든 프로세스는 포 그라운드에서 실행됩니다. 키보드에서 입력을 받고 화면에 출력을 보냅니다.

당신은 이것이 일어나는 것을 볼 수 있습니다 ls명령. 현재 디렉토리의 모든 파일을 나열하려면 다음 명령을 사용할 수 있습니다.

$ls ch*.doc

이렇게하면 이름이 다음으로 시작하는 모든 파일이 표시됩니다. ch 그리고 끝 .doc

ch01-1.doc   ch010.doc  ch02.doc    ch03-2.doc 
ch04-1.doc   ch040.doc  ch05.doc    ch06-2.doc
ch01-2.doc   ch02-1.doc

프로세스는 포 그라운드에서 실행되고 출력은 내 화면으로 전달되며 ls 명령은 입력을 원하지만 (그렇지 않은 경우) 키보드에서 입력을 기다립니다.

프로그램이 포 그라운드에서 실행되고 시간이 많이 걸리는 동안에는 프로그램이 처리를 완료하고 나올 때까지 프롬프트를 사용할 수 없기 때문에 다른 명령을 실행할 수 없습니다 (다른 프로세스 시작).

백그라운드 프로세스

백그라운드 프로세스는 키보드에 연결하지 않고 실행됩니다. 백그라운드 프로세스에 키보드 입력이 필요한 경우 대기합니다.

백그라운드에서 프로세스를 실행하는 이점은 다른 명령을 실행할 수 있다는 것입니다. 다른 작업을 시작하기 위해 완료 될 때까지 기다릴 필요가 없습니다!

백그라운드 프로세스를 시작하는 가장 간단한 방법은 앰퍼샌드 (&) 명령 끝에.

$ls ch*.doc &

이름이 다음으로 시작하는 모든 파일을 표시합니다. ch 그리고 끝 .doc

ch01-1.doc   ch010.doc  ch02.doc    ch03-2.doc 
ch04-1.doc   ch040.doc  ch05.doc    ch06-2.doc
ch01-2.doc   ch02-1.doc

여기에서 ls 명령은 입력을 원하지만 (그렇지 않은 경우), 포 그라운드로 이동하고 키보드에서 데이터를 제공 할 때까지 중지 상태가됩니다.

첫 번째 줄에는 백그라운드 프로세스 (작업 번호 및 프로세스 ID)에 대한 정보가 포함됩니다. 배경과 전경 사이에서 조작하려면 작업 번호를 알아야합니다.

Enter 키를 누르면 다음이 표시됩니다.

[1]   +   Done                 ls ch*.doc &
$

첫 번째 줄은 ls명령 백그라운드 프로세스가 성공적으로 완료됩니다. 두 번째는 다른 명령에 대한 프롬프트입니다.

실행중인 프로세스 나열

다음을 실행하여 자신의 프로세스를 쉽게 볼 수 있습니다. ps (프로세스 상태) 명령은 다음과 같습니다-

$ps
PID       TTY      TIME        CMD
18358     ttyp3    00:00:00    sh
18361     ttyp3    00:01:31    abiword
18789     ttyp3    00:00:00    ps

ps에 가장 일반적으로 사용되는 플래그 중 하나는 -f (f for full) 옵션은 다음 예와 같이 더 많은 정보를 제공합니다.

$ps -f
UID      PID  PPID C STIME    TTY   TIME CMD
amrood   6738 3662 0 10:23:03 pts/6 0:00 first_one
amrood   6739 3662 0 10:22:54 pts/6 0:00 second_one
amrood   3662 3657 0 08:10:53 pts/6 0:00 -ksh
amrood   6892 3662 4 10:51:50 pts/6 0:00 ps -f

다음은 표시되는 모든 필드에 대한 설명입니다. ps -f 명령-

Sr. 아니. 열 및 설명
1

UID

이 프로세스가 속한 사용자 ID (실행중인 사람)

2

PID

프로세스 ID

PPID

상위 프로세스 ID (시작한 프로세스의 ID)

4

C

프로세스의 CPU 활용

5

STIME

프로세스 시작 시간

6

TTY

프로세스와 관련된 터미널 유형

7

TIME

프로세스에 소요 된 CPU 시간

8

CMD

이 프로세스를 시작한 명령

함께 사용할 수있는 다른 옵션이 있습니다. ps 명령-

Sr. 아니. 옵션 및 설명
1

-a

모든 사용자에 대한 정보를 표시합니다.

2

-x

터미널이없는 프로세스에 대한 정보를 표시합니다.

-u

-f 옵션과 같은 추가 정보를 표시합니다.

4

-e

확장 정보를 표시합니다.

프로세스 중지

프로세스 종료는 여러 가지 방법으로 수행 할 수 있습니다. 종종 콘솔 기반 명령에서 CTRL + C 키 입력 (기본 인터럽트 문자)을 보내면 명령이 종료됩니다. 이것은 프로세스가 포 그라운드 모드에서 실행될 때 작동합니다.

프로세스가 백그라운드에서 실행중인 경우 다음을 사용하여 작업 ID를 가져와야합니다. ps명령. 그 후에는kill 다음과 같이 프로세스를 죽이는 명령-

$ps -f
UID      PID  PPID C STIME    TTY   TIME CMD
amrood   6738 3662 0 10:23:03 pts/6 0:00 first_one
amrood   6739 3662 0 10:22:54 pts/6 0:00 second_one
amrood   3662 3657 0 08:10:53 pts/6 0:00 -ksh
amrood   6892 3662 4 10:51:50 pts/6 0:00 ps -f
$kill 6738
Terminated

여기, kill 명령은 first_one방법. 프로세스가 일반 kill 명령을 무시하면 다음을 사용할 수 있습니다.kill -9 다음과 같이 프로세스 ID 뒤에-

$kill -9 6738
Terminated

부모 및 자식 프로세스

각 유닉스 프로세스에는 프로세스 ID (pid)와 상위 프로세스 ID (ppid)의 두 가지 ID 번호가 할당되어 있습니다. 시스템의 각 사용자 프로세스에는 상위 프로세스가 있습니다.

실행하는 대부분의 명령은 셸을 부모로 사용합니다. 을 체크하다ps -f 이 명령이 프로세스 ID와 상위 프로세스 ID를 모두 나열한 예입니다.

좀비 및 고아 프로세스

일반적으로 자식 프로세스가 종료되면 부모 프로세스는 SIGCHLD신호. 그런 다음 부모는 다른 작업을 수행하거나 필요에 따라 새 자식을 다시 시작할 수 있습니다. 그러나 때때로 부모 프로세스는 자식이 죽기 전에 죽습니다. 이 경우 "모든 프로세스의 상위"는init프로세스가 새 PPID (상위 프로세스 ID)가됩니다. 경우에 따라 이러한 프로세스를 고아 프로세스라고합니다.

프로세스가 종료되면 ps 목록에 여전히 프로세스가 표시 될 수 있습니다. Z상태. 이것은 좀비 또는 소멸 된 프로세스입니다. 프로세스가 종료되었으며 사용되지 않습니다. 이러한 프로세스는 고아 프로세스와 다릅니다. 실행을 완료했지만 여전히 프로세스 테이블에서 항목을 찾습니다.

데몬 프로세스

데몬은 종종 루트 권한 및 다른 프로세스의 서비스 요청으로 실행되는 시스템 관련 백그라운드 프로세스입니다.

데몬에는 제어 터미널이 없습니다. 열 수 없습니다/dev/tty. 당신이 할 경우"ps -ef" 그리고 봐 tty 필드에서 모든 데몬은 ? 에 대한 tty.

정확히 말하면 데몬은 백그라운드에서 실행되는 프로세스이며 일반적으로 작업 할 수있는 작업이 발생하기를 기다립니다. 예를 들어, 인쇄 명령을 기다리는 프린터 데몬입니다.

긴 처리를 요구하는 프로그램이 있다면 데몬으로 만들고 백그라운드에서 실행하는 것이 좋습니다.

최고 사령부

그만큼 top 명령은 다양한 기준으로 정렬 된 프로세스를 빠르게 표시하는 데 매우 유용한 도구입니다.

자주 업데이트하고 실제 및 가상 메모리, CPU 사용량,로드 평균 및 바쁜 프로세스에 대한 정보를 표시하는 대화 형 진단 도구입니다.

다음은 top 명령을 실행하고 다른 프로세스의 CPU 사용 통계를 보는 간단한 구문입니다.

$top

작업 ID와 프로세스 ID

백그라운드 및 일시 중단 된 프로세스는 일반적으로 다음을 통해 조작됩니다. job number (job ID). 이 번호는 프로세스 ID와 다르며 더 짧기 때문에 사용됩니다.

또한 작업은 연속적으로 또는 동시에 병렬로 실행되는 여러 프로세스로 구성 될 수 있습니다. 작업 ID를 사용하는 것이 개별 프로세스를 추적하는 것보다 쉽습니다.