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


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

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

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

  • Foreground processes (also referred to as interactive processes) – these are initialized and controlled through a terminal session. In other words, there has to be a user connected to the system to start such processes; they haven’t started automatically as part of the system functions/services.
  • Background processes (also referred to as non-interactive/automatic processes) – are processes not connected to a terminal; they don’t expect any user input.

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

Linux에서 프로세스 생성

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

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

  • Using The System() Function – this method is relatively simple, however, it’s inefficient and has significantly certain security risks.
  • Using fork() and exec() Function – this technique is a little advanced but offers greater flexibility, speed, together with security.

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

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

그리고 프로그램은 프로세스 ID (PID)와 상위 프로세스 ID (PPID)로 식별되므로 프로세스를 다음과 같이 추가로 분류 할 수 있습니다.

  • Parent processes – these are processes that create other processes during run-time.
  • Child processes – these processes are created by other processes during run-time.

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

init 프로세스는 항상 프로세스 ID가 1입니다. 모든 분리 된 프로세스의 대체 상위 역할을합니다.

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

# pidof systemd
# pidof top
# pidof httpd

현재 쉘의 프로세스 ID와 상위 프로세스 ID를 찾으려면 다음을 실행하십시오.

$ echo $$
$ echo $PPID

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

# cloudcmd

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

# cloudcmd &
# jobs

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

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

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

# bg

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

# jobs
# fg %1

또한 : 백그라운드에서 Linux 명령을 시작하고 터미널에서 프로세스를 분리하는 방법

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

  • Running – here it’s either running (it is the current process in the system) or it’s ready to run (it’s waiting to be assigned to one of the CPUs).
  • Waiting – in this state, a process is waiting for an event to occur or for a system resource. Additionally, the kernel also differentiates between two types of waiting processes; interruptible waiting processes – can be interrupted by signals and uninterruptible waiting processes – are waiting directly on hardware conditions and cannot be interrupted by any event/signal.
  • Stopped – in this state, a process has been stopped, usually by receiving a signal. For instance, a process that is being debugged.
  • Zombie – here, a process is dead, it has been halted but it’s still has an entry in the process table.

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

다음과 같이 시스템의 활성 프로세스 선택에 대한 정보를 표시합니다.

# ps 
# ps -e | head 

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

# top 

더 많은 사용 예를 보려면 다음을 읽으십시오. Linux의 12 TOP 명령 예

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

# glances

포괄적 인 사용 가이드를 보려면 다음을 읽어보십시오. Glances – Linux 용 고급 실시간 시스템 모니터링 도구

활성 프로세스를 나열하는 데 사용할 수있는 몇 가지 다른 유용한 Linux 시스템 모니터링 도구가 있습니다. 아래 링크를 열어 자세한 내용을 읽으십시오.

  1. 20 Command Line Tools to Monitor Linux Performance
  2. 13 More Useful Linux Monitoring Tools

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. A Guide to Kill, Pkill and Killall Commands to Terminate Linux Processess
  2. How to Find and Kill Running Processes in Linux

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

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

$ kill -l

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

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

  • SIGHUP 1 – sent to a process when its controlling terminal is closed.
  • SIGINT 2 – sent to a process by its controlling terminal when a user interrupts the process by pressing [Ctrl+C].
  • SIGQUIT 3 – sent to a process if the user sends a quit signal [Ctrl+D].
  • SIGKILL 9 – this signal immediately terminates (kills) a process and the process will not perform any clean-up operations.
  • SIGTERM 15 – this a program termination signal (kill will send this by default).
  • SIGTSTP 20 – sent to a process by its controlling terminal to request it to stop (terminal stop); initiated by the user pressing [Ctrl+Z].

다음은 파이어 폭스 애플리케이션이 동결되면 PID를 사용하여 종료하는 kill 명령 예제입니다.

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

이름을 사용하여 응용 프로그램을 종료하려면 다음과 같이 pkill 또는 killall을 사용하십시오.

$ pkill firefox
$ killall firefox 

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

그러나 root 권한이있는 시스템 사용자는 nice 및 renice 명령으로 이에 영향을 줄 수 있습니다.

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

$ top  

nice 명령을 사용하여 프로세스에 대한 nice 값을 설정하십시오. 일반 사용자는 자신이 소유 한 프로세스에 0에서 20까지 좋은 값을 부여 할 수 있습니다.
\n루트 사용자 만 음의 nice 값을 사용할 수 있습니다.

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

$ renice +8  2687
$ renice +8  2103

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

  1. Linux Process Management: Boot, Shutdown, and Everything in Between
  2. Find Top 15 Processes by Memory Usage with ‘top’ in Batch Mode
  3. Find Top Running Processes by Highest Memory and CPU Usage in Linux
  4. How to Find a Process Name Using PID Number in Linux

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