서버에서 명령을 실행하고 있습니다. 이 라이브러리와 함께 제공됩니다http://www.graphicsmagick.org/.
기본적으로 많은 파일에서 이미지 처리를 수행하는 for 루프가 있습니다.
명령은 몇 시간 동안 실행되었으며 앞으로 몇 시간 더 실행됩니다. ssh를 종료하고 원격 시스템에서 이 명령을 계속 실행할 수 있는지 궁금합니다. SSH를 종료하면 현재 명령 실행을 종료하기 위한 신호가 전송됩니까?
또 다른 점은 원격으로 명령을 실행하는 동안 노트북이 과열되었다는 것입니다. 활동 모니터는 bash가 CPU의 70%를 사용하고 있음을 보여줍니다. 나는 맥북 프로를 사용한다
이제 이것은 이상합니다. 원격 명령은 로컬 컴퓨터에 어떤 스트레스를 주나요?
답변1
한 가지 해결책은 명령 앞에 를 추가하는 것입니다 nohup
. 이렇게 하면 컴퓨터가 "끊기" 신호를 무시하도록 지시합니다(예: SSH 세션 종료). 루프 에서는 작동하지 않을 수 있습니다 for
.
또 다른 좋은 해결책(제가 개인적으로 가장 좋아하는 솔루션)은 "screen" 패키지를 설치하는 것입니다. screen
프로세스를 계속 실행하면서 연결을 끊기 위해 누를 수 있는 가상 터미널을 제공합니다 CTRL + A , D
. 다시 연결 화면은 나중에 사용할 수 있습니다 screen -r
.
답변2
연결된 제어 터미널(귀하의 경우)이 있는 세션 리더가 bash
종료되면 운영 체제는 포그라운드 프로세스 그룹(포그라운드 작업)의 모든 프로세스에 SIGHUP을 보냅니다. 또한 bash
기본적으로 SIGHUP은 실행 중이거나 중지된 모든 작업에 전송됩니다(중지된 작업도 SIGCONT를 전송함). 이제 SIGHUP을 받은 후 기본 작업은 프로세스를 종료하는 것입니다.
프로세스가 종료된 후에도 프로세스를 계속 실행하는 방법에는 여러 가지가 있습니다 bash
. 첫째, 프로세스가 SIGHUP에 영향을 받지 않도록 할 수 있습니다. 이것이 바로 이 nohup
명령의 역할입니다. 둘째, 해당 프로세스 그룹을 백그라운드로 설정하고 bash
SIGHUP을 보내지 않도록 지시할 수 있습니다. 이것이 disown
쉘 내장의 목적입니다(또한 huponexit
대화형 로그인 쉘이 종료될 때 SIGHUP이 전송되도록 하는 쉘 옵션이 있다는 점에 유의하십시오). 모든 작업에 전송됨)
다시 로그인한 후 터미널을 프로세스 그룹에 다시 연결하려면 이 기능이 있는 래퍼를 사용할 수 있습니다. 터미널 멀티플렉서 등에 screen
이 기능이 있습니다.