Saya memindahkan satu direktori ke direktori lain menggunakan perintah mv.
Namun, saya terpaksa mematikan komputer saya, yang berarti kehilangan koneksi ke server.
Apa yang terjadi pada perintah mv?
Catatan: Setelah saya login kembali, saya melihat bahwa semua file telah dipindahkan dengan benar meskipun saya yakin itu tidak dipindahkan ketika saya menutup koneksi. Tampaknya mv terus berjalan.
Ini saya mesin ssh to centosh di server cloud steadfast.net.
screen
atautmux
sekali masuk untuk memulai terminal virtual yang akan terus beroperasi ketika Anda memutuskan koneksi [yaitu, Anda kemudian dapat melampirkan kembali dan melihat terminal dalam keadaan yang sama seperti Anda meninggalkannya, ditambah setiap pembaruan di antara]Jawaban:
Jika
mv
dimulai sebagai:Kemudian
mv
akan menerima SIGPIPE (dan mati) jika mencoba menulis apa pun ke stdout atau stderr (seperti pesan kesalahan).Jika Anda memulai sesi interaktif seperti:
Dan mulai
mv
dari shell interaktif di sana, ketika sisi master terminal semu dimulai dengansshd
akan ditutup (setelahssh
menutup koneksi TCP saat keluar), pemimpin sesi terkait dengan sisi budak dari terminal semu, yang adalah shell interaktif jarak jauh, akan menerima sinyal SIGHUP (hang up).Setelah menerima sinyal itu, shell (kecuali Anda telah mengeluarkan a
trap '' HUP
) biasanya meneruskan sinyal itu ke semua proses dalam pekerjaan yang telah mereka mulai, kecuali Anda secara eksplisit mengatakannya untuk tidak (suka dengandisown
atau dengan&|
di beberapa shell).Proses lain (seperti
mv
) biasanya akan mati ketika menerima sinyal itu kecuali mereka telah diperintahkan untuk mengabaikannya (dengan menggunakannohup
atau jika orangtua mereka mengabaikannya).Jika Anda telah mengeluarkan:
Kemudian semua pekerjaan dimulai setelah itu akan mewarisinya dan akan mengabaikan SIGHUP.
Shell tidak akan mati karena sinyal SIGHUP yang dikirim setelah pemutusan tetapi akan keluar pada prompt berikutnya, karena stdinnya hilang. Saat keluar, beberapa cangkang mengirim SIGHUP ke pekerjaan mereka (tidak diakui). Mereka yang mulai setelah
trap '' HUP
kehendak mengabaikannya, yang lain akan mati.Singkatnya, dalam kasus itu, kecuali Anda telah mengambil tindakan pencegahan sebelumnya sehingga itu tidak terjadi, Anda
mv
akan mati.Untuk menghindarinya lain kali, jika menggunakan
tcsh
,zsh
ataubash
, sebelum mematikan mesin, tekan Ctrl-Zuntuk menangguhkanmv
, masukbg
untuk melanjutkannya di latar belakang, dandisown
untuk menolaknya .Atau Anda bisa menggunakan
screen
atautmux
. Setelah SIGHUP, mereka hanya akan melepaskan dari terminal host yang sekarang hilang, tetapi aplikasi yang berjalan di terminal yang ditiru akan terus berjalan tanpa kepala dan Anda dapat memasang kembali sesi ke terminal lain nanti untuk melihat bagaimanamv
hasilnya.Atau gunakan
nohup mv
untuk membuatmv
kebal terhadap SIGHUP dan memiliki output dan kesalahan pergi kenohup.out
file yang dapat Anda periksa nanti.Sekarang, saya tidak tahu tentang penyedia hosting spesifik Anda, tetapi dengan beberapa, ketika Anda
ssh
masuk ke instance, Anda tidak memulai sesi shell di sana melainkan melampirkan ke konsol, yaitu sesi yang sudah dimulai , dan ketika Anda keluar, Anda tidak mengakhiri sesi itu, lepas saja darinya. Jadi, shell tidak terbunuh, juga tidakmv
. Jika itu masalahnya, Anda akan melihat bahwaps
lari dari sana akan memberi Anda hal yang samapid
untuk shell Anda di duassh
sesi terpisah .sumber