서버에서 명령을 실행하고 있습니다. 이 라이브러리와 함께 제공됩니다.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을 보내지 않도록 지시할 수 있습니다. 이것이 쉘 내장이 사용되는 이유입니다 ( 대화형 로그인 쉘이 종료될 때 SIGHUP이 모든 작업에 전송되도록 하는 쉘 옵션 disown
도 있음에 유의하십시오 ).huponexit
다시 로그인한 후 터미널을 프로세스 그룹에 다시 연결하려면 이를 수행할 수 있는 래퍼를 사용할 수 있습니다. 터미널 멀티플렉서에는 screen
이 기능이 있습니다.