Я перемещаю один каталог в другой, используя команду mv.
Тем не менее, я был вынужден выключить компьютер, что означает потерю соединения с сервером.
Что происходит с командой mv?
Примечание. После повторного входа я увидел, что все файлы были правильно перемещены, хотя я был уверен, что он не был перемещен при закрытии соединения. Кажется, mv продолжал бежать.
Это я ssh к машине centosh в облачном сервере steadfast.net.
screen
илиtmux
войдите в систему, чтобы запустить виртуальный терминал, который будет продолжать работать при отключении [т.е. вы можете позже повторно подключить его и увидеть терминал в том же состоянии, в котором вы его оставили, а также любые обновления в между]Ответы:
Если
mv
был запущен как:Затем
mv
получит SIGPIPE (и умрет), если попытается записать что-либо в stdout или stderr (например, сообщение об ошибке).Если вы начали интерактивный сеанс, как:
И началось
mv
с интерактивной оболочки там, когда ведущая сторона псевдотерминала, запущенная с помощью,sshd
будет закрыта (приssh
закрытии соединения TCP при выходе), лидер сеанса, связанный с ведомой стороной псевдотерминала, что удаленная интерактивная оболочка, получит сигнал SIGHUP (повесить трубку).После получения этого сигнала оболочки (если вы не выполнили a
trap '' HUP
) обычно направляют этот сигнал всем процессам в заданиях, которые они запустили, если вы явно не сказали этого не делать (например, сdisown
или с&|
в некоторых оболочках).Другие процессы (например
mv
), как правило, умирают при получении этого сигнала, если им не было сказано игнорировать его (используяnohup
или если их родитель игнорировал его).Если вы выпустили:
Затем все задания, запущенные после того, как он унаследует его и проигнорирует SIGHUP.
Оболочка не умрет от сигнала SIGHUP, посланного после разъединения, но выйдет при следующем запросе, так как его stdin исчез. После выхода некоторые оболочки отправляют SIGHUP на свои (не отрекшиеся) рабочие места. Те, кто начал после того
trap '' HUP
, как проигнорируют это, другие умрут.Короче говоря, в этом случае, если вы не приняли предварительные меры предосторожности, чтобы этого не произошло, вы
mv
умрете.Чтобы избежать этого в следующий раз, если используется
tcsh
,zsh
илиbash
, перед выключением машины, нажмите Ctrl-Zприостановитьmv
, введитеbg
возобновить его в фоновом режиме, иdisown
в открестился его.Или вы могли бы использовать
screen
илиtmux
. При SIGHUP те просто отсоединяются от своего теперь уже удаленного хост-терминала, но приложения, работающие в терминале, который он эмулирует, продолжат работать без заголовка, и вы можете позже присоединить сеанс к другому терминалу, чтобы посмотреть, какmv
прошло.Или используйте,
nohup mv
чтобы сделатьmv
невосприимчивым к SIGHUP и получить его вывод и ошибки перейти кnohup.out
файлу, который вы можете проверить позже.Теперь я не знаю о вашем конкретном хостинг-провайдере, но с некоторыми, когда вы
ssh
входите в экземпляр, вы не запускаете там сеансы оболочки, а скорее подключаетесь к консоли, то есть к сеансу, который уже был запущен и когда вы выходите, вы не прекращаете сеанс, просто отсоединяетесь от него. Итак, оболочка не убивает и не убиваетmv
. Если это так, вы заметите, чтоps
запуск оттуда даст вам то же самоеpid
для вашей оболочки через два отдельныхssh
сеанса.источник