이 기사에서는 Linux(Ubuntu 포함) 셸 백그라운드에서 명령을 실행하는 방법을 보여줍니다. SSH를 통해 원격으로 작업할 때 유용합니다.
SSH를 통해 원격 컴퓨터에 원격으로 연결되어 있고 긴 작업을 실행하려고 한다고 가정해 보겠습니다.
작업이 실행되는 동안 일반적으로 터미널 창이 열린 상태에서 연결을 열어 두어야 합니다. 그러나 다른 작업을 수행하기 위해 창을 닫아야 하는 경우 또는 연결을 방해할 가능성이 있는 인터넷 연결이 불안정한 경우에는 번거로울 수 있습니다.
창이 닫히거나 연결이 끊어지면 원격 컴퓨터에서 명령 실행이 중지될 수 있습니다.
백그라운드에서 명령을 실행하면 이를 피할 수 있습니다. 연결/세션이 열려 있는지 여부에 관계없이 계속 실행됩니다.
백그라운드에서 실행할 명령을 보내는 것은 명령을 실행하고 싶지만 완료될 때까지 기다리지 않고 나중에 스크립트에서 출력을 요구하지 않는 경우 스크립트에서 유용할 수 있습니다.
& 사용 백그라운드에서 명령 실행
Linux의 백그라운드에서 명령을 실행하는 것은 쉽습니다. &를 추가하세요. 명령 끝에 문자:
your_command_here &
예를 들어 다음 명령은 한 쌍의 파일을 압축합니다. 명령은 백그라운드에서 실행되므로 다른 명령을 실행하기 전에 완료될 때까지 기다릴 필요가 없습니다.
zip archive.zip file1 file2 &
쉬운! 출력은 다음과 같습니다.
[1] 3001
...작업 표시(이 경우에는 [1] ) 및 프로세스 ID(이 경우에는 3001 ) 백그라운드에서 실행 중인 명령.
작업이 완료되었을 때(실패 ), 작업 상태가 출력됩니다.
[1] + done zip archive.zip file1 file2
백그라운드 작업의 출력 숨기기
명령의 출력은 백그라운드에서 실행되는 동안 터미널에 계속 인쇄됩니다.
이것을 숨기고 싶다면(즉, 다른 작업을 수행하는 데 방해가 됨) 표준 리디렉션을 사용하여 출력을 억제할 수 있습니다.
your_command > /dev/null 2>&1 &
- 위, > 명령의 STDOUT(표준 출력)을 /dev/null으로 리디렉션합니다. .
- 명령의 STDERROR(표준 오류 출력)는 2>&!를 사용하여 STDOUT으로 리디렉션됩니다. STDERR이 /dev/null으로 이동하도록 뿐만 아니라.
- /dev/null 출력이 아무데도 가지 않는다는 것을 의미합니다. 그것은 사라졌고, 숨겨져 있었고, 아무 것도 아닙니다.
실행 중인 백그라운드 작업 나열
작업 사용 현재 실행 중인 백그라운드 작업을 나열하는 명령:
jobs -l
실행 중인 백그라운드 작업 목록이 표시됩니다. 각 항목은 다음과 같습니다.
[1] + 3601 running ping 8.8.8.8 > /dev/null 2>&1
위에서 ping 8.8.8.8> /dev/null 2>&1 명령을 볼 수 있습니다. 작업 ID가 1이고 프로세스 ID가 3601인 백그라운드에서 실행 중입니다.
백그라운드 작업 중지
죽이기 명령은 작업을 중지합니다:
kill 3601
... 프로세스 ID와 함께 제공 백그라운드 작업을 중지(종료)합니다.
세션이 중단되더라도 백그라운드 작업 실행 유지
이것은 아마도 가장 유용한 비트일 것입니다.
창을 닫거나 연결이 끊기거나 세션이 중단되더라도 명령이 계속 실행되도록 하려면 disown 명령을 사용하여 백그라운드 작업을 거부해야 합니다.
disown %1
위의 작업 ID가 1인 백그라운드 작업 거부됩니다. 현재 쉘과의 연결이 끊기고 완료되거나 오류가 발생하거나 KILL 명령을 사용하여 종료될 때까지 계속 실행됩니다.
실행 중인 모든 프로세스를 나열하는 방법을 보려면 이 문서를 확인하세요. – 거부한 작업을 추적해야 하는 경우 필요할 수 있습니다. .
실행 중인 명령을 백그라운드로 이동
실행 중인 명령을 백그라운드로 이동하려면 일시 중지한 다음 백그라운드로 이동해야 합니다.
이렇게 하려면 명령이 실행되는 동안 CTRL + Z를 누릅니다. . 다음과 같은 내용이 표시됩니다.
suspended command_name
...명령이 일시 중단되었음을 확인합니다.
그런 다음 bg를 입력합니다. 백그라운드에서 명령을 계속 실행하는 명령:
bg
다음과 같은 내용이 표시됩니다.
continued command_name
...명령이 이제 백그라운드에서 실행 중인지 확인합니다.