리눅스에서 쉘 스크립트를 일시 중지하고 다시 시작하는 방법: 실용 가이드

리눅스의 강력한 기능 중 하나는 쉘 스크립트의 실행을 일시 중지하고 나중에 다시 시작할 수 있다는 것입니다. 이 가이드에서는 쉘 스크립트의 실행을 제어하는 기본 방법을 소개하며, 이러한 기능을 활용하여 작업 효율을 향상시키는 방법을 탐색합니다. 작업 제어 명령 사용에서 스크립트 내에서 일시 중지하는 방법에 이르기까지 다양한 기술을 다룹니다.

목차

쉘 스크립트란?

쉘 스크립트는 리눅스와 유닉스 계열 운영 체제에서 사용되는 스크립팅 언어 유형입니다. 파일에 여러 명령을 작성하여 단일 실행 파일로 실행할 수 있게 합니다. 쉘 스크립트는 복잡한 작업의 자동화와 효율적인 시스템 관리 작업을 가능하게 합니다. 텍스트 기반 인터페이스를 통해 직접 실행하거나 배치 처리로 사용되며, 시스템의 다양한 수준에서 널리 사용됩니다.

일시 중지의 기초: Ctrl+Z 사용하기

쉘 스크립트나 명령 줄에서 실행 중인 프로그램을 일시 중지하는 가장 기본적인 방법은 Ctrl+Z 키보드 단축키를 사용하는 것입니다. 이 동작은 현재 포그라운드에서 실행 중인 프로세스를 일시 중지하고 시스템에 의해 작업 번호를 할당합니다. 일시 중지된 프로세스는 bg 명령을 사용해 백그라운드로 옮기거나 fg 명령을 사용해 포그라운드에서 다시 시작할 수 있습니다.

이 방법은 실행 시간이 긴 스크립트나 프로그램을 일시적으로 중지하고 다른 작업에 우선순위를 두는 데 매우 유용합니다. 또한 의도하지 않은 결과를 생성할 수 있는 프로그램을 안전하게 중지하는 비상 조치로도 사용됩니다. Ctrl+Z를 사용하여 일시 중지하는 것은 리눅스의 작업 제어 기능을 활용하는 첫 단계이며, 효율적인 시스템 관리에 필수적입니다.

작업 제어 명령 개요

리눅스는 여러 프로세스의 효율적인 관리를 가능하게 하는 작업 제어 기능을 갖추고 있습니다. 이러한 기능은 프로세스를 백그라운드나 포그라운드에서 실행하고, 일시 중지된 프로세스를 다시 시작할 수 있게 합니다. 주요 작업 제어 명령에는 다음이 포함됩니다:

  • jobs: 현재 쉘 세션과 관련된 작업 목록과 상태를 표시합니다. 작업이 백그라운드에서 실행 중인지 또는 중지되었는지 확인할 수 있습니다.
  • bg: 중지(일시 중지)된 작업을 백그라운드에서 다시 시작합니다. 지정된 작업이 없으면 마지막으로 중지된 작업이 대상이 됩니다.
  • fg: 백그라운드나 중지된 작업을 포그라운드에서 다시 시작합니다. 이 명령을 사용하면 작업에 다시 입력할 수 있습니다.
  • kill: 작업이나 프로세스를 종료합니다. 특정 작업 번호나 프로세스 ID를 지정하여 특정 작업이나 프로세스를 종료할 수 있습니다.

이러한 명령을 숙달함으로써 리눅스 시스템에서 여러 프로세스를 유연하게 제어할 수 있으며, 특히 실행 시간이 긴 스크립트나 프로세스를 관리하는 데 특히 유용합니다.

bg 명령을 사용한 백그라운드 실행

bg 명령은 중지(일시 중지)된 작업을 백그라운드에서 다시 시작하는 데 사용됩니다. 이 명령을 사용하면 사용자 입력 없이도 작업을 계속 실행할 수 있어 다른 작업을 포그라운드에서 진행할 수 있습니다.

작업을 백그라운드에서 실행하려면 먼저 Ctrl+Z를 사용하여 포그라운드에서 실행 중인 작업을 일시 중지합니다. 그런 다음 bg 명령 뒤에 작업 번호를 지정하여 백그라운드에서 다시 시작할 수 있습니다. 작업 번호는 jobs 명령을 사용하여 찾을 수 있습니다.

예를 들어, jobs 명령의 출력이 다음과 같다면:

[1]+  Stopped                 myscript.sh
[2]   Running                 another_script.sh &

myscript.sh를 백그라운드에서 다시 시작하려면 다음 명령을 실행합니다:

bg %1

이 명령은 myscript.sh, 작업 번호 1을 백그라운드에서 다시 시작합니다. 백그라운드 작업은 사용자 입력을 받지 않으므로, 출력을 로그 파일로 리디렉션하거나 jobs 명령을 사용하여 상태와 출력을 확인하는 것이 권장됩니다.

fg 명령을 사용하여 포그라운드로 돌아가기

fg 명령은 백그라운드나 중지된 작업을 포그라운드로 가져와 다시 시작하는 데 사용됩니다. 이 명령을 사용하면 백그라운드에서 실행 중이거나 일시 중지된 프로세스를 포그라운드로 가져와 직접 사용자 입력과 모니터링이 가능합니다.

작업을 포그라운드에서 다시 시작하려면 먼저 jobs 명령으로 현재 작업 상태를 확인하여 작업 번호를 식별합니다. 그런 다음 작업 번호 앞에 % 기호를 붙여 fg 명령을 실행합니다.

예를 들어, 다음 작업이 백그라운드에서 실행 중인 경우:

[1]-  Running                 background_task.sh &
[2]+  Stopped                 paused_script.sh

paused_script.sh (작업 번호 2)를 포그라운드에서 다시 시작하려면 다음 명령을 사용합니다:

fg %2

이 작업은 paused_script.sh를 사용자 상호작용을 위해 포그라운드로 다시 가져옵니다. fg 명령은 오랜 시간 동안 실행되는 프로세스나 사용자 감독 하에 세부 작업이 필요한 경우에 특히 효과적입니다. 포그라운드에서 실행을 다시 시작하면 실시간 진행 상황을 모니터링하고 필요한 경우 직접 개입할 수 있습니다.

jobs 명령으로 작업 목록 표시하기

jobs 명령은 현재 쉘 세션과 관련된 작업 목록과 상태를 표시하는 데 사용됩니다. 사용자는 백그라운드에서 실행 중인 프로세스, 일시 중지(정지)된 프로세스 및 기타 작업 상태를 볼 수 있습니다.

jobs 명령을 실행하면 각 작업에 고유한 작업 번호가 할당되며, 상태(실행 중, 정지 등)와 함께 표시됩니다. 이를 통해 bg, fg, 또는 kill 명령을 사용하여 어떤 작업을 제어할지 지정할 수 있습니다.

예를 들어, jobs 명령을 실행한 결과가 다음과 같이 표시된다면:

[1]   Running                 ./long_running_script.sh &
[2]-  Stopped                 ./paused_script.sh
[3]+  Running                 ./background_task.sh &

이 출력에서 작업 번호 1이 백그라운드에서 실행 중임을 알 수 있고, 작업 번호 2가 일시 중지(정지)되었으며, 작업 번호 3도 백그라운드에서 실행 중임을 알 수 있습니다. 이 정보를 바탕으로 특정 작업을 포그라운드로 가져오거나, 다시 시작하거나, 종료할 수 있습니다.

jobs 명령은 리눅스에서 작업 효율을 향상시키는 데 필수적인 도구로, 다중 작업을 동시에 실행하거나 장시간 실행되는 스크립트를 관리할 때 특히 유용합니다.

kill 명령으로 쉘 스크립트 제어하기

kill 명령은 프로세스를 종료하는 강력한 도구로, 특정 프로세스 ID(PID)나 작업 번호를 지정하여 쉘 스크립트와 모든 프로세스를 제어할 수 있습니다. 이 명령은 프로그램이 응답하지 않거나 특정 조건 하에서 종료해야 할 필요가 있을 때 매우 유용합니다.

프로세스를 종료하는 기본 사용법은 종료하려는 프로세스의 PID를 kill 명령 뒤에 지정하는 것입니다. PID는 ps 또는 top과 같은 명령을 사용하여 찾을 수 있습니다.

예시:

kill 12345

이 명령은 PID 12345를 가진 프로세스를 종료합니다.

또한, kill 명령은 쉘의 작업 제어를 사용하여 제어되는 작업에 대해 작동할 수 있습니다. 특정 작업을 종료하기 위해 작업 번호 앞에 %를 붙입니다.

예시:

kill %1

이 명령은 작업 번호 1을 가진 프로세스를 종료합니다.

뿐만 아니라, kill 명령은 프로세스에 신호를 보내 다양한 효과를 일으킬 수 있습니다. 예를 들어, 즉시 종료(SIGKILL 또는 -9) 또는 프로그램 종료 요청(SIGTERM 또는 -15) 등이 있습니다.

예시:

kill -9 12345

이 명령은 PID 12345를 가진 프로세스를 즉시 강제 종료합니다.

kill 명령은 매우 강력하므로 사용에 주의가 필요합니다. 실수로 필수 시스템 프로세스를 종료하면 시스템 안정성에 영향을 줄 수 있습니다.

스크립트 내에서 일시 중지: sleep 명령

쉘 스크립트 내에서 프로세스를 일시적으로 중지하려면 sleep 명령을 사용합니다. 이 명령은 지정된 시간(초) 동안 스크립트 실행을 지연시켜 그 시간 동안 프로세스를 일시 중지합니다. sleep 명령은 스크립트 내에서 시간에 따른 작업을 관리하거나 연속적인 작업 사이에 고정된 대기 시간을 도입하는 데 특히 유용합니다.

기본 사용법은 간단합니다: sleep 뒤에 일시 중지하고자 하는 초 단위의 시간을 입력합니다. 예를 들어, 스크립트 실행을 5초 동안 일시 중지하려면 다음과 같이 작성합니다:

sleep 5

초 단위 외에도, sleep 명령은 분(m), 시간(h), 일(d)을 지정할 수 있습니다. 예를 들어, 프로세스를 2분 동안 일시 중지하려면 다음을 사용합니다:

sleep 2m

sleep 명령을 활용함으로써, 서버 과부하 없이 데이터 백업 작업을 하는 스크립트를 생성하는 등, 쉘 스크립트 내에서 프로세스 관리에 더 세밀한 제어를 달성할 수 있습니다.

실용적인 시나리오 및 예제

리눅스에서 쉘 스크립트를 일시 중지하고 다시 시작하는 방법을 배우는 것은 작업 효율을 크게 향상시킬 수 있습니다. 여기에서는 작업 제어를 활용한 실용적인 시나리오를 소개합니다.

시나리오 1: 백그라운드에서 장시간 실행되는 작업

대량의 데이터를 처리하는 스크립트를 실행 중이지만 동시에 다른 작업도 수행해야 하는 경우입니다. 이 경우 스크립트를 백그라운드에서 실행하고 필요에 따라 상태를 확인할 수 있습니다.

  1. 스크립트를 백그라운드에서 실행합니다.
   ./data_processing_script.sh &
  1. jobs 명령으로 실행 중인 작업을 확인합니다.
   jobs
  1. 작업이 완료되었는지 확인하고 필요하다면 포그라운드로 다시 가져옵니다.
   fg %1

시나리오 2: 시스템 자원 조정

여러 작업을 실행하는 동안 시스템 자원을 적절하게 관리하려면 특정 작업을 일시 중지하여 시스템 부하를 줄일 수 있습니다.

  1. 시스템 부하를 유발한다고 생각되는 작업을 일시 중지합니다.
   kill -STOP %1
  1. 시스템 부하가 감소하면 작업을 다시 시작합니다.
   kill -CONT %1

시나리오 3: 주기적인 작업 자동화

특정 간격으로 스크립트를 실행해야 할 때, sleep 명령을 사용하여 대기 시간을 도입함으로써 스크립트 실행을 자동화할 수 있습니다.

  1. 스크립트를 실행하고 완료된 후 5분 동안 기다립니다.
   ./routine_task.sh
   sleep 5m
  1. 이 단계를 반복하여 주기적인 작업을 자동화합니다.

이러한 시나리오는 리눅스의 작업 제어 기능과 sleep 명령을 활용하여 일상적인 작업을 간소화하고 시스템 자원을 효과적으로 관리하는 기본적인 예시를 보여줍니다. 이러한 기술을 숙달함으로써 복잡한 작업을 쉽게 처리하고 작업 생산성을 향상시킬 수 있습니다.

결론

리눅스에서 쉘 스크립트를 효과적으로 일시 중지하고 다시 시작하는 방법을 마스터하는 것은 작업의 유연성을 증가시키고 작업을 효율적으로 관리하는 데 중요합니다. Ctrl+Z로 일시 중지하고, bgfg 명령으로 백그라운드와 포그라운드에서 프로세스를 관리하며, jobs로 작업 목록을 표시하고, kill 명령으로 프로세스를 제어하고, 스크립트 내에서 sleep을 사용하여 일시 중지하는 것은 모든 리눅스 사용자가 알아야 할 기본적인 기술입니다. 이러한 명령을 적절히 사용함으로써 여러 프로세스와 작업을 효율적으로 제어하고, 작업 생산성을 개선할 수 있습니다. 실용적인 시나리오를 통해 이러한 기술을 활용하는 방법을 배움으로써, 일상적인 작업에서 더 큰 유연성과 효율성을 달성할 수 있습니다. 리눅스에서 이러한 기술을 습득하여 우리의 작업을 간소화하고 작업 관리를 더 효과적으로 해봅시다.

목차