웹사이트 검색

Linux의 프로세스에 대해 알아야 할 모든 것 [종합 가이드]


이 기사에서는 프로세스에 대한 기본적인 이해를 살펴보고 특정 명령을 사용하여 Linux에서 프로세스를 관리하는 방법을 간략하게 살펴보겠습니다.

프로세스는 실행 중인 프로그램을 나타냅니다. 프로그램의 실행 중인 인스턴스입니다. 이는 프로그램 명령, 파일에서 읽은 데이터, 다른 프로그램 또는 시스템 사용자의 입력으로 구성됩니다.

프로세스 유형

Linux에는 기본적으로 두 가지 유형의 프로세스가 있습니다.

  • 포그라운드 프로세스(대화형 프로세스라고도 함) - 터미널 세션을 통해 초기화되고 제어됩니다. 즉, 이러한 프로세스를 시작하려면 시스템에 연결된 사용자가 있어야 합니다. 시스템 기능/서비스의 일부로 자동으로 시작되지 않았습니다.
  • 백그라운드 프로세스(비대화형/자동 프로세스라고도 함) – 터미널에 연결되지 않은 프로세스입니다. 그들은 사용자 입력을 기대하지 않습니다.

데몬이란 무엇입니까?

이는 시스템 시작 시 시작되어 서비스로 영원히 계속 실행되는 특별한 유형의 백그라운드 프로세스입니다. 그들은 죽지 않습니다. 자동으로 시스템 작업(서비스로 실행)으로 시작됩니다. 그러나 init 프로세스를 통해 사용자가 제어할 수 있습니다.

Linux에서 프로세스 생성

새로운 프로세스는 일반적으로 기존 프로세스가 메모리에 자신의 정확한 복사본을 만들 때 생성됩니다. 하위 프로세스는 상위 프로세스와 동일한 환경을 갖지만 프로세스 ID 번호만 다릅니다.

Linux에서 새 프로세스를 생성하는 데 사용되는 두 가지 일반적인 방법이 있습니다.

  • System() 함수 사용 – 이 방법은 비교적 간단하지만 비효율적이며 상당한 보안 위험을 안고 있습니다.
  • fork() 및 exec() 함수 사용 – 이 기술은 약간 고급이지만 보안과 함께 더 뛰어난 유연성, 속도를 제공합니다.

Linux는 프로세스를 어떻게 식별합니까?

Linux는 다중 사용자 시스템이므로 서로 다른 사용자가 시스템에서 다양한 프로그램을 실행할 수 있으므로 프로그램의 실행 중인 각 인스턴스는 커널에 의해 고유하게 식별되어야 합니다.

프로그램은 프로세스 ID(PID)와 상위 프로세스 ID(PPID)로 식별되므로 프로세스는 다음과 같이 분류될 수 있습니다.

  • 상위 프로세스 – 런타임 중에 다른 프로세스를 생성하는 프로세스입니다.
  • 하위 프로세스 – 이 프로세스는 런타임 중에 다른 프로세스에 의해 생성됩니다.

초기화 프로세스

Init 프로세스는 시스템에 있는 모든 프로세스의 어머니(부모)이며 Linux 시스템이 부팅될 때 실행되는 첫 번째 프로그램입니다. 시스템의 다른 모든 프로세스를 관리합니다. 커널 자체에 의해 시작되므로 원칙적으로 상위 프로세스가 없습니다.

init 프로세스의 프로세스 ID는 항상 1입니다. 이는 모든 고아 프로세스의 입양 부모 역할을 합니다.

pidof 명령을 사용하여 프로세스 ID를 찾을 수 있습니다.

pidof systemd
pidof top
pidof httpd

현재 셸의 프로세스 ID와 상위 프로세스 ID를 찾으려면 다음을 실행하세요.

echo $$
echo $PPID

Linux에서 프로세스 시작

명령이나 프로그램(예: cloudcmd – CloudCommander)을 실행하면 시스템에서 프로세스가 시작됩니다. 다음과 같이 포그라운드(대화형) 프로세스를 시작할 수 있으며, 터미널에 연결되고 사용자는 입력을 보낼 수 있습니다.

cloudcmd

Linux 백그라운드 작업

백그라운드(비대화형)에서 프로세스를 시작하려면 & 기호를 사용하세요. 여기서 프로세스는 포그라운드로 이동할 때까지 사용자의 입력을 읽지 않습니다.

cloudcmd &
jobs

[Ctrl + Z]를 사용하여 프로세스를 일시 중지하여 백그라운드로 보낼 수도 있습니다. 이렇게 하면 SIGSTOP 신호가 프로세스에 전송되어 해당 작업이 중지됩니다. 유휴 상태가 됩니다.

tar -cf backup.tar /backups/*  #press Ctrl+Z
jobs

위에 일시중단된 명령을 백그라운드에서 계속 실행하려면 bg 명령을 사용하십시오.

bg

백그라운드 프로세스를 포그라운드로 보내려면 다음과 같이 작업 ID와 함께 fg 명령을 사용하세요.

jobs
fg %1

당신도 좋아할 것입니다: 백그라운드에서 Linux 명령을 시작하고 터미널에서 프로세스를 분리하는 방법

Linux의 프로세스 상태

실행 중에 프로세스는 환경/상황에 따라 한 상태에서 다른 상태로 변경됩니다. Linux에서 프로세스에는 다음과 같은 가능한 상태가 있습니다.

  • 실행 중 – 여기에서는 실행 중(시스템의 현재 프로세스)이거나 실행 준비가 되어 있습니다(CPU 중 하나에 할당되기를 기다리고 있음).
  • 대기 중 – 이 상태에서 프로세스는 이벤트가 발생하거나 시스템 리소스를 기다리고 있습니다. 또한 커널은 두 가지 유형의 대기 프로세스를 구별합니다. 중단 가능한 대기 프로세스 – 신호에 의해 중단될 수 있으며 무정전 대기 프로세스는 하드웨어 조건에서 직접 대기하며 어떤 이벤트/신호로도 중단될 수 없습니다.
  • 중지됨 – 이 상태에서는 일반적으로 신호를 수신하여 프로세스가 중지되었습니다. 예를 들어, 디버깅 중인 프로세스입니다.
  • 좀비 – 여기에서는 프로세스가 종료되어 중지되었지만 여전히 프로세스 테이블에 항목이 있습니다.

Linux에서 활성 프로세스를 보는 방법

시스템에서 실행 중인 프로세스를 보거나 나열하기 위한 여러 Linux 도구가 있습니다. 전통적이고 잘 알려진 두 가지 도구는 ps 및 top 명령입니다.

1. ps 명령

아래와 같이 시스템의 활성 프로세스 선택에 대한 정보가 표시됩니다.

ps 
ps -e | head 

2. 상단 – 시스템 모니터링 도구

top은 아래 스크린샷과 같이 실행 중인 시스템의 동적 실시간 보기를 제공하는 강력한 도구입니다.

top 

더 많은 주요 사용 예를 보려면 다음을 읽어보세요: Linux의 12 TOP 명령 예

3. 시선 – 시스템 모니터링 도구

glances는 고급 기능을 갖춘 비교적 새로운 시스템 모니터링 도구입니다.

glances

포괄적인 사용 가이드를 보려면 Glances - Linux용 고급 실시간 시스템 모니터링 도구를 읽어보세요.

활성 프로세스를 나열하는 데 사용할 수 있는 기타 유용한 Linux 시스템 모니터링 도구가 몇 가지 있습니다. 아래 링크를 열어 해당 도구에 대해 자세히 알아보세요.

  1. Linux 성능을 모니터링하는 20가지 명령줄 도구
  2. 13가지 더 유용한 리눅스 모니터링 도구

Linux에서 프로세스를 제어하는 방법

Linux에는 kill, pkill, pgrep 및 killall과 같은 프로세스를 제어하기 위한 몇 가지 명령도 있습니다. 다음은 이를 사용하는 방법에 대한 몇 가지 기본 예입니다.

pgrep -u tecmint top
kill 2308
pgrep -u tecmint top
pgrep -u tecmint glances
pkill glances
pgrep -u tecmint glances

이러한 명령을 심층적으로 사용하고 Linux에서 활성 프로세스를 종료/종료하는 방법을 알아보려면 아래 링크를 여십시오.

  1. Linux 프로세스를 종료하기 위한 Kill, Pkill 및 Killall 명령 가이드
  2. Linux에서 실행 중인 프로세스를 찾아 종료하는 방법

시스템이 정지될 때 이를 사용하여 Linux에서 응답하지 않는 응용 프로그램을 종료할 수 있습니다.

프로세스에 신호 보내기

Linux에서 프로세스를 제어하는 기본적인 방법은 프로세스에 신호를 보내는 것입니다. 실행되는 모든 신호를 보기 위해 프로세스에 보낼 수 있는 여러 신호가 있습니다.

kill -l

프로세스에 신호를 보내려면 앞서 언급한 kill, pkill 또는 pgrep 명령을 사용하십시오. 그러나 프로그램은 신호를 인식하도록 프로그래밍된 경우에만 신호에 응답할 수 있습니다.

그리고 대부분의 신호는 시스템 내부에서 사용되거나 프로그래머가 코드를 작성할 때 사용됩니다. 다음은 시스템 사용자에게 유용한 신호입니다.

  • SIGHUP 1 – 제어 터미널이 닫힐 때 프로세스로 전송됩니다.
  • SIGINT 2 – 사용자가 [Ctrl+C]를 눌러 프로세스를 중단할 때 제어 터미널에 의해 프로세스로 전송됩니다.
  • SIGQUIT 3 – 사용자가 [Ctrl+D] 종료 신호를 보내는 경우 프로세스에 전송됩니다.
  • SIGKILL 9 – 이 신호는 프로세스를 즉시 종료(종료)하고 프로세스는 정리 작업을 수행하지 않습니다.
  • SIGTERM 15 – 프로그램 종료 신호입니다(kill은 기본적으로 이 신호를 보냅니다).
  • SIGTSTP 20 – 제어 터미널이 프로세스에 중지(터미널 중지)를 요청하기 위해 전송합니다. 사용자가 [Ctrl+Z]를 눌러 시작됩니다.

다음은 Firefox 응용 프로그램이 정지된 후 PID를 사용하여 종료하는 종료 명령 예입니다.

pidof firefox
kill 9 2687
OR
kill -KILL 2687
OR
kill -SIGKILL 2687  

해당 이름을 사용하여 애플리케이션을 종료하려면 다음과 같이 pkill 또는 killall을 사용하십시오.

pkill firefox
killall firefox 

Linux 프로세스 우선순위 변경

Linux 시스템에서는 모든 활성 프로세스에 우선순위와 특정 좋은 값이 있습니다. 우선 순위가 높은 프로세스는 일반적으로 우선 순위가 낮은 프로세스보다 더 많은 CPU 시간을 얻습니다.

그러나 루트 권한이 있는 시스템 사용자는 nicerenice 명령을 사용하여 이에 영향을 미칠 수 있습니다.

top 명령의 출력에서 NI는 프로세스의 좋은 값을 보여줍니다.

top  

프로세스에 좋은 값을 설정하려면 nice 명령을 사용하세요. 일반 사용자는 자신이 소유한 프로세스에 0부터 20까지 좋은 값을 부여할 수 있다는 점을 명심하세요.
루트 사용자만 음수 nice 값을 사용할 수 있습니다.

프로세스의 우선순위를 renice하려면 다음과 같이 renice 명령을 사용하세요.

renice +8  2687
renice +8  2103

Linux 프로세스를 관리하고 제어하는 방법에 대한 유용한 기사를 확인하세요.

  1. Linux 프로세스 관리: 부팅, 종료 및 그 사이의 모든 것
  2. 배치 모드에서 'top'을 사용하여 메모리 사용량 기준 상위 15개 프로세스 찾기
  3. Linux에서 메모리 및 CPU 사용량이 가장 높은 상위 실행 프로세스 찾기
  4. Linux에서 PID 번호를 사용하여 프로세스 이름을 찾는 방법

지금은 여기까지입니다! 질문이나 추가 아이디어가 있으시면 아래 피드백 양식을 통해 공유해 주세요.