리눅스 작업 관리

LinuxBeginner
지금 연습하기

소개

이 랩에서는 Linux 작업 관리의 기본 사항을 배우게 됩니다. 작업 관리는 Linux 사용자에게 필수적인 기술로, 여러 프로세스를 동시에 실행하고 실행을 제어할 수 있게 해줍니다. 작업 관리를 숙달하면 백그라운드에서 명령을 효율적으로 실행하고, 전경 (foreground) 과 배경 (background) 작업을 전환하며, 실행 중인 모든 프로세스를 제어할 수 있습니다.

이 랩을 통해 다음을 배우게 됩니다.

  • 백그라운드에서 프로세스를 시작하는 방법
  • 실행 중인 작업을 보고 관리하는 방법
  • 백그라운드 작업을 전경으로 가져오는 방법
  • 실행 중인 작업을 일시 중지하고 나중에 다시 시작하는 방법
  • 더 이상 필요하지 않은 작업을 종료하는 방법

이러한 기술은 지속적인 상호 작용이 필요하지 않은 장시간 실행되는 작업에 특히 유용하며, 프로세스가 백그라운드에서 실행되는 동안 다른 작업을 계속할 수 있게 해줍니다.

이것은 가이드 실험입니다. 학습과 실습을 돕기 위한 단계별 지침을 제공합니다.각 단계를 완료하고 실무 경험을 쌓기 위해 지침을 주의 깊게 따르세요. 과거 데이터에 따르면, 이것은 초급 레벨의 실험이며 완료율은 91%입니다.학습자들로부터 97%의 긍정적인 리뷰율을 받았습니다.

백그라운드 작업 시작 및 관리

이 단계에서는 앰퍼샌드 기호 (&) 를 사용하여 프로세스를 백그라운드에서 시작하는 방법과 jobs 명령을 사용하여 관리하는 방법을 배우게 됩니다.

백그라운드 작업이란 무엇인가요?

Linux 에서 작업 (job) 은 셸이 관리하는 프로세스입니다. 기본적으로 터미널에서 명령을 실행하면 전경 (foreground) 에서 실행됩니다. 즉, 명령이 완료될 때까지 터미널이 사용 중입니다. 그러나 명령 끝에 & 기호를 추가하면 백그라운드에서 실행하여 다른 작업을 위해 터미널을 비울 수 있습니다.

백그라운드 프로세스 생성

백그라운드에서 계속 실행될 간단한 스크립트를 만들어 보겠습니다. 이는 다른 작업을 계속하면서 실행하려는 장시간 실행되는 작업을 시뮬레이션합니다.

먼저, 아직 해당 디렉토리에 있지 않다면 프로젝트 디렉토리로 이동합니다.

cd ~/project

이제 nano 텍스트 편집기를 사용하여 background_task.sh라는 스크립트를 만듭니다.

nano ~/project/background_task.sh

편집기 내에서 다음 내용을 추가합니다.

#!/bin/bash
## A simple script that simulates a long-running task
count=0
while true; do
  count=$((count + 1))
  echo "Task running: iteration $count"
  sleep 5
done

이 스크립트는 무한정 실행되며 5 초마다 메시지를 출력합니다.

Ctrl+O를 누른 다음 Enter를 눌러 파일을 저장하고, Ctrl+X를 눌러 nano 를 종료합니다.

다음으로, 스크립트를 실행 가능하게 만듭니다.

chmod +x ~/project/background_task.sh

이제 명령 끝에 & 기호를 추가하여 스크립트를 백그라운드에서 실행합니다.

~/project/background_task.sh &

다음과 유사한 출력을 볼 수 있습니다.

[1] 1234

괄호 안의 숫자 [1]은 작업 번호이고, 그 뒤의 숫자는 프로세스 ID(PID) 입니다. 이러한 숫자는 시스템에 따라 다를 수 있습니다.

실행 중인 작업 확인

현재 실행 중인 모든 백그라운드 작업을 보려면 jobs 명령을 사용합니다.

jobs

다음과 유사한 출력을 볼 수 있습니다.

[1]  + running    ~/project/background_task.sh

이는 스크립트가 백그라운드에서 실행 중임을 확인합니다.

PID 를 포함하여 작업에 대한 자세한 정보를 얻으려면 다음을 사용합니다.

jobs -l

출력은 작업 번호, PID 및 상태를 표시해야 합니다.

[1]  + 1234 running    ~/project/background_task.sh

스크립트가 백그라운드에서 계속 실행되는 동안 터미널은 다른 명령을 실행할 수 있도록 비어 있습니다. 스크립트의 출력은 여전히 터미널로 전송되므로 메시지가 주기적으로 나타나는 것을 볼 수 있습니다.

백그라운드 작업을 포그라운드로 가져오기

이 단계에서는 fg 명령을 사용하여 백그라운드 작업을 전경으로 가져오는 방법을 배우게 됩니다. 이는 현재 백그라운드에서 실행 중인 프로세스와 상호 작용해야 할 때 유용합니다.

전경화란 무엇인가요?

전경화 (foregrounding) 는 백그라운드 작업을 전경으로 가져와 터미널에서 활성 프로세스로 만드는 프로세스를 의미합니다. 작업이 전경에 있으면 터미널을 제어합니다. 즉, 직접 상호 작용할 수 있지만 완료되거나 다시 백그라운드로 이동할 때까지 다른 명령을 실행할 수 없습니다.

fg 명령 사용

이전 단계에서 실행 중인 background_task.sh 스크립트가 있는지 확인합니다. 다음을 사용하여 확인할 수 있습니다.

jobs

스크립트가 실행 중인 작업으로 나열되어야 합니다.

작업을 전경으로 가져오려면 fg 명령 다음에 백분율 기호와 함께 작업 번호를 사용합니다.

fg %1

백그라운드 작업이 하나만 있는 경우 단순히 다음을 사용할 수 있습니다.

fg

명령을 실행하면 스크립트가 전경으로 가져와지고 터미널에서 직접 출력을 볼 수 있습니다.

Task running: iteration X
Task running: iteration X+1
...

명령 프롬프트가 사라지고 스크립트가 이제 터미널을 제어하는 것을 알 수 있습니다. 스크립트를 종료하거나 다시 백그라운드로 이동할 때까지 다른 명령을 더 이상 입력할 수 없습니다.

전경 작업 중지

전경 작업을 중지하고 명령 프롬프트로 돌아가려면 Ctrl+C를 누릅니다. 이렇게 하면 프로세스에 인터럽트 신호가 전송되어 종료됩니다.

^C

터미널에 작업이 종료되었음을 나타내는 메시지가 표시되고 명령 프롬프트가 다시 표시되어야 합니다.

작업이 더 이상 실행되지 않는지 확인하려면 다음을 실행합니다.

jobs

출력이 없어야 하며, 이는 백그라운드 작업이 실행되지 않음을 나타냅니다.

다음 단계를 위해 스크립트를 다시 백그라운드에서 시작해 보겠습니다.

~/project/background_task.sh &

다음과 유사한 출력을 통해 작업이 시작되었음을 확인할 수 있습니다.

[1] 1345

작업 번호와 PID 는 시스템에 따라 다를 수 있습니다.

작업 일시 중단 및 재개

이 단계에서는 실행 중인 전경 작업을 일시 중단하고 전경 또는 백그라운드에서 재개하는 방법을 배우게 됩니다. 이는 프로세스를 종료하지 않고 일시적으로 일시 중지해야 할 때 유용합니다.

전경 작업 일시 중단

먼저, 백그라운드 작업을 전경으로 가져오겠습니다.

fg %1

이제 터미널에서 스크립트의 출력을 볼 수 있습니다. 이 전경 작업을 일시 중단하려면 Ctrl+Z를 누릅니다.

^Z

다음과 유사한 메시지가 표시되어야 합니다.

[1]  + suspended  ~/project/background_task.sh

이는 작업이 일시 중단되었음을 나타냅니다. 작업은 여전히 메모리에 로드되어 있지만 실행되지 않습니다. 본질적으로 "일시 중지"된 것입니다.

작업이 일시 중단되었는지 확인하려면 다음을 실행합니다.

jobs

다음과 유사한 출력을 볼 수 있습니다.

[1]  + suspended  ~/project/background_task.sh

백그라운드에서 일시 중단된 작업 재개

일시 중단된 작업은 전경 또는 백그라운드에서 재개할 수 있습니다. 백그라운드에서 재개하려면 bg 명령 다음에 작업 번호를 사용합니다.

bg %1

작업이 백그라운드에서 재개되었음을 확인하는 메시지가 표시되어야 합니다.

[1]  + continued  ~/project/background_task.sh

작업이 이제 백그라운드에서 실행 중인지 확인합니다.

jobs

출력은 작업 상태가 "suspended"에서 "running"으로 변경되었음을 표시해야 합니다.

[1]  + running    ~/project/background_task.sh

전경에서 일시 중단된 작업 재개

작업을 다시 일시 중단해 보겠습니다. 먼저 전경으로 가져옵니다.

fg %1

그런 다음 Ctrl+Z를 눌러 일시 중단합니다.

^Z

이제 bg를 사용하여 백그라운드에서 재개하는 대신 fg를 사용하여 전경에서 재개합니다.

fg %1

작업이 실행을 재개하고 터미널에서 출력을 다시 볼 수 있습니다.

Ctrl+C를 눌러 작업을 중지해 보겠습니다.

^C

이렇게 하면 작업이 종료되고 명령 프롬프트로 돌아갑니다.

워크플로우에서 작업 제어 사용

작업을 일시 중단, 백그라운드에서 재개, 전경에서 재개 및 종료하는 기능은 프로세스를 강력하게 제어할 수 있도록 합니다. 이 워크플로우는 특히 다음과 같은 경우에 유용합니다.

  1. 프로세스가 실행되는 동안 다른 것을 확인해야 하는 경우
  2. 시스템 리소스를 일시적으로 확보해야 하는 경우
  3. 여러 터미널 창을 열지 않고 여러 프로세스를 대화식으로 실행하려는 경우

다음 단계를 위해 백그라운드 작업을 다시 시작합니다.

~/project/background_task.sh &

백그라운드 작업 종료

이 단계에서는 더 이상 필요하지 않은 백그라운드 작업을 종료하는 다양한 방법을 배우게 됩니다. 시스템 리소스를 확보하고 시스템 성능을 유지하려면 적절한 작업 종료가 중요합니다.

종료할 작업 식별

먼저, 현재 실행 중인 작업을 확인해 보겠습니다.

jobs

백그라운드 작업이 실행 중인 것을 볼 수 있습니다.

[1]  + running    ~/project/background_task.sh

프로세스 ID(PID) 를 포함한 자세한 정보가 필요한 경우 다음을 사용합니다.

jobs -l

다음과 유사한 출력이 표시됩니다.

[1]  + 1456 running    ~/project/background_task.sh

PID(작업 번호 뒤의 숫자) 에 유의하십시오. 프로세스를 종료하는 데 사용할 수 있습니다.

방법 1: 작업 번호를 사용하여 작업 종료

백그라운드 작업을 종료하는 가장 간단한 방법은 작업 번호와 함께 kill 명령을 사용하는 것입니다.

kill %1

작업이 종료되었는지 확인합니다.

jobs

다음과 같은 내용을 볼 수 있습니다.

[1]  + terminated  ~/project/background_task.sh

작업이 여전히 실행 중인 경우 (일부 프로세스는 더 강력한 종료 신호가 필요할 수 있음) 다음을 사용할 수 있습니다.

kill -9 %1

-9 플래그는 SIGKILL 신호를 보내 프로세스가 정리할 수 없도록 강제로 종료합니다.

방법 2: PID 를 사용하여 작업 종료

스크립트의 다른 인스턴스를 백그라운드에서 시작해 보겠습니다.

~/project/background_task.sh &

작업 번호와 PID 를 표시하는 출력을 볼 수 있습니다.

[1] 1567

PID 를 사용하여 이 작업을 종료하려면 다음을 사용합니다.

kill 1567

1567을 작업의 실제 PID 로 바꿉니다.

작업이 종료되었는지 확인합니다.

jobs

방법 3: killall 과 함께 프로세스 이름 사용

스크립트의 또 다른 인스턴스를 시작해 보겠습니다.

~/project/background_task.sh &

동일한 프로세스의 여러 인스턴스가 실행 중인 경우 killall 명령을 사용하여 한 번에 모두 종료할 수 있습니다.

killall background_task.sh

이 명령은 이름이 background_task.sh인 모든 프로세스를 종료합니다.

작업이 실행 중이지 않은지 확인합니다.

jobs

출력이 없어야 하며, 이는 모든 백그라운드 작업이 종료되었음을 나타냅니다.

종료 신호 이해

kill 명령을 사용할 때 프로세스에 신호를 보내는 것입니다. 기본적으로 kill은 SIGTERM 신호 (신호 15) 를 보내 프로세스에 정상적으로 종료하도록 요청합니다. 프로세스가 SIGTERM 에 응답하지 않으면 SIGKILL(신호 9) 을 사용하여 강제로 종료할 수 있습니다.

kill -TERM %1 ## Same as kill %1
kill -KILL %1 ## Same as kill -9 %1

기타 유용한 신호는 다음과 같습니다.

  • SIGHUP (신호 1): 구성 파일을 다시 로드하는 데 자주 사용됨
  • SIGINT (신호 2): Ctrl+C 를 누르는 것과 동일
  • SIGSTOP (신호 19): 프로세스를 일시 중단합니다 (잡거나 무시할 수 없음)
  • SIGCONT (신호 18): 중지된 프로세스를 계속합니다.

마지막 시연을 위해 백그라운드 작업을 다시 시작한 다음 종료해 보겠습니다.

~/project/background_task.sh &
jobs
kill %1
jobs

이 시퀀스는 작업을 시작하고, 실행 중임을 확인하고, 종료한 다음, 더 이상 실행 중이지 않음을 확인합니다.

요약

이 랩에서는 Linux 환경에서 작업을 관리하기 위한 필수 기술을 배웠습니다.

  1. 백그라운드 작업 시작: & 기호를 사용하여 백그라운드에서 프로세스를 실행하는 방법을 배웠습니다. 이를 통해 장시간 실행되는 작업이 실행되는 동안 터미널에서 계속 작업할 수 있습니다.

  2. 작업 상태 확인: jobs 명령을 사용하여 실행 중인 작업에 대한 정보 (상태, 작업 번호 및 프로세스 ID 포함) 를 확인했습니다.

  3. 백그라운드 작업 전경으로 가져오기: fg 명령을 사용하여 백그라운드 작업을 전경으로 가져오는 연습을 했습니다. 이를 통해 백그라운드 작업과 직접 상호 작용할 수 있습니다.

  4. 작업 일시 중단 및 재개: Ctrl+Z를 사용하여 실행 중인 전경 작업을 일시 중단하고 전경 (fg) 또는 백그라운드 (bg) 에서 재개하는 방법을 배웠습니다.

  5. 작업 종료: 작업이 더 이상 필요하지 않을 때 작업을 종료하는 다양한 방법을 살펴보았습니다. 여기에는 작업 번호 또는 PID 와 함께 kill 명령을 사용하고, killall을 사용하여 이름으로 여러 프로세스를 종료하는 것이 포함됩니다.

이러한 작업 관리 기술은 모든 Linux 사용자에게 유용하며, 특히 장시간 실행되는 프로세스를 사용하거나 터미널 환경에서 멀티태스킹을 수행할 때 유용합니다. 프로세스가 실행되는 방식과 시기를 제어함으로써 시스템 리소스를 보다 효율적으로 사용하고 워크플로우를 간소화할 수 있습니다.

kill 명령과 함께 다양한 신호를 사용하여 정상적인 종료부터 강제 종료까지 프로세스 동작을 제어할 수 있으며, 이를 통해 시스템의 프로세스를 세밀하게 제어할 수 있습니다.