ssh를 수행 한 다음 연결을 끊으면 계속되는 작업은 어떻게됩니까? 명령을 사용하여 한

mv 명령을 사용하여 한 디렉토리를 다른 디렉토리로 옮깁니다.

그러나 컴퓨터를 강제로 종료했기 때문에 서버 연결이 끊어졌습니다.

mv 명령은 어떻게됩니까?

참고 : 다시 로그인 한 후 연결을 닫을 때 파일이 이동되지 않았음에도 불구하고 모든 파일이 올바르게 이동 된 것을 확인했습니다. mv가 계속 실행되는 것 같습니다.

이것은 steadfast.net 클라우드 서버에서 centosh 시스템에 ssh입니다.



답변

다음 mv과 같이 시작된 경우 :

ssh host mv x y

그런 다음 mvstdout 또는 stderr에 오류 메시지와 같은 것을 쓰려고하면 SIGPIPE (및 다이)가 수신됩니다.

다음과 같은 대화식 세션을 시작한 경우 :

ssh host

그리고 mv의사 터미널의 마스터 측이 sshd(종료시 sshTCP 연결을 닫을 때) 의사 터미널의 슬레이브 측과 관련된 세션의 리더 가 닫힐 때 대화 형 쉘에서 시작 했습니다. 원격 대화식 쉘이며 SIGHUP 신호를 수신합니다 (전화 끊기).

해당 신호를 수신하면 (을 발행하지 않은 경우) 쉘은 trap '' HUP일반적으로 ( 일부 쉘 과 함께 disown또는 &|일부 쉘에서) 알리지 않는 한, 해당 신호를 시작된 작업의 모든 프로세스로 전달합니다 .

다른 프로세스 (와 같은 mv)는 일반적으로 해당 신호를 수신 할 때 ( nohup부모 가 사용 하거나 부모가 무시한 경우) 신호를 무시하지 않는 한 해당 신호를 수신하면 죽 습니다.

발행 한 경우 :

trap '' HUP

그런 다음 모든 작업은 작업을 상속 한 후 SIGHUP을 무시합니다.

쉘은 연결 해제시 전송 된 SIGHUP 신호로 죽지 않지만 stdin이 사라지기 때문에 다음 프롬프트에서 종료됩니다. 종료되면 일부 쉘은 SIGHUP을 자신의 (권리되지 않은) 작업으로 보냅니다. trap '' HUP의지 후에 시작한 사람들은 그것을 무시하고 다른 사람들은 죽습니다.

요컨대, 사전 예방 조치를 취하지 않으면 사전에 예방 조치를 취하지 않으면 mv의지가 죽습니다.

, 다음에 그것을 피할 사용하는 경우하려면 tcsh, zsh또는 bash컴퓨터를 종료하기 전에, 언론, Ctrl-Z일시 중단 mv, 입력 bg배경을 재개하고, disown하는 부인 을.

또는 당신은 사용할 수 있습니다 screen또는 tmux. SIGHUP을 사용하면 이제 사라진 호스트 터미널에서 분리되지만 에뮬레이션하는 터미널에서 실행되는 응용 프로그램은 헤드리스로 계속 실행되며 나중에 다른 터미널에 세션을 다시 연결하여 진행 상황을 확인할 수 있습니다 mv.

또는 사용은 nohup mv만들 mvSIGHUP에 면역 및 출력이 오류는 이동 nohup.out나중에 확인할 수 있습니다 파일.

지금, 나는 특정 호스팅 제공 업체에 대해 알고하지 않습니다,하지만 당신은 할 때 일부, ssh인스턴스에, 당신은 거기 쉘 세션을 시작하지만,하지 않을 오히려 첨부 이미 시작 된 세션 즉, 콘솔에 종료시 해당 세션을 종료하지 않고 분리하십시오. 따라서 쉘은 죽이지 않습니다 mv. 이 경우 두 개의 개별 세션에서 셸에 ps대해 동일한 것을 제공 한다는 것을 알 수 있습니다 .pidssh