Przenoszę jeden katalog do drugiego za pomocą polecenia mv.
Byłem jednak zmuszony wyłączyć komputer, co oznacza utratę połączenia z serwerem.
Co się stało z poleceniem mv?
Uwaga: po ponownym zalogowaniu zobaczyłem, że wszystkie pliki zostały poprawnie przeniesione, chociaż byłem pewien, że nie zostały przeniesione po zamknięciu połączenia. Wygląda na to, że mv nadal działa.
To jest ja ssh to centosh machine in steadfast.net cloud server.
screen
lubtmux
po zalogowaniu się, aby uruchomić terminal wirtualny, który będzie nadal działał po rozłączeniu [możesz później podłączyć go ponownie i zobaczyć terminal w takim samym stanie, w jakim go opuściłeś, oraz wszelkie aktualizacje w między]Odpowiedzi:
Jeśli
mv
został uruchomiony jako:Następnie
mv
otrzyma SIGPIPE (i umrze), jeśli spróbuje napisać cokolwiek na stdout lub stderr (np. Komunikat o błędzie).Jeśli rozpocząłeś sesję interaktywną, taką jak:
I zaczął się
mv
od interaktywnej powłoki tam, kiedy strona główna pseudotermina uruchomiona przezsshd
zostanie zamknięta (possh
zamknięciu połączenia TCP przy wyjściu), lider sesji powiązany z niewolniczą stroną pseudo-terminala, który jest zdalną interaktywną powłoką, otrzyma sygnał SIGHUP (rozłącz się).Po otrzymaniu tego sygnału, powłoki (chyba że wydałeś a
trap '' HUP
) zazwyczaj przekazują ten sygnał do wszystkich procesów w zadaniach, które rozpoczęły, chyba że wyraźnie to powiedziałeś (nie zdisown
lub&|
w niektórych powłokach).Inne procesy (takie jak
mv
) zazwyczaj umierają po otrzymaniu tego sygnału, chyba że otrzymają polecenie zignorowania go (przez użycienohup
lub jeśli ich rodzic zignorował go).Jeśli wydałeś:
Następnie wszystkie zadania rozpoczęte po nim odziedziczą go i zignorują SIGHUP.
Powłoka nie umrze z powodu sygnału SIGHUP wysłanego po rozłączeniu, ale opuści się przy następnym monicie, ponieważ jej standardowe wejście zniknęło. Po wyjściu niektóre pociski wysyłają SIGHUP do (nie odrzuconych) zadań. Ci, którzy zaczęli po tym
trap '' HUP
, zignorują to, inni umrą.Krótko mówiąc, w takim przypadku, jeśli nie podejmiesz wcześniejszych środków ostrożności, aby tak się nie stało,
mv
umrzesz.Aby tego uniknąć następnym razem, jeśli używasz
tcsh
,zsh
lubbash
, przed wyłączeniem urządzenia, należy nacisnąć przycisk Ctrl-Z, aby wstrzymaćmv
, wprowadźbg
wznowić ją w tle, idisown
aby wyprzeć go.Lub możesz użyć
screen
lubtmux
. Po SIGHUP, one po prostu odłączą się od swojego już nieistniejącego terminala hosta, ale aplikacje uruchomione w terminalu, który emuluje, będą nadal działać bezgłowo i możesz ponownie podłączyć sesję do innego terminala, aby zobaczyć, jakmv
poszło.Lub użyj,
nohup mv
abymv
uodpornić się na SIGHUP, a jego wyjście i błędy trafią donohup.out
pliku, który możesz sprawdzić później.Teraz nie wiem o twoim konkretnym dostawcy hostingu, ale z niektórymi, gdy wchodzisz
ssh
do instancji, nie zaczynasz tam sesji powłoki, ale raczej przyłączasz się do konsoli, czyli do sesji, która została już uruchomiona , a kiedy wychodzisz, nie kończysz tej sesji, po prostu odłącz się od niej. Więc skorupa nie zabija, ani niemv
. W takim przypadku zauważysz, żeps
ucieczka stamtąd dałaby ci to samopid
dla powłoki w dwóch oddzielnychssh
sesjach.źródło