Perintah reboot -f
tidak pernah kembali (kecuali Anda tidak memiliki izin untuk menyebabkan reboot). Pada saat diterbitkan, klien SSH sedang menunggu sesuatu untuk dilakukan, yang bisa berupa:
- server SSH memberitahukan klien bahwa sesuatu terjadi yang memerlukan perhatiannya, misalnya bahwa ada beberapa output untuk ditampilkan, atau bahwa perintah jarak jauh telah selesai;
- beberapa peristiwa di sisi klien, seperti sinyal untuk menyampaikan;
- timer menyala untuk menyebabkan klien mengirim pesan keepalive (dan menutup koneksi jika server tidak membalas).
Karena proses server SSH sudah mati, klien SSH tidak akan mati sampai timer menyala.
Jika Anda berlari ssh remotehost 'reboot -f >/dev/null &'
, maka yang terjadi adalah:
- Shell jarak jauh meluncurkan
reboot
perintah di latar belakang.
- Karena perintah shell sisi-server telah keluar dan tidak ada proses menahan deskriptor file untuk output standar terbuka, server SSH menutup koneksi.
- The
reboot
perintah menyebabkan mesin untuk reboot.
Namun, ini tidak dapat diandalkan: tergantung pada waktu, langkah 3 mungkin terjadi sebelum langkah 2. Menambahkan timer membuat ini tidak mungkin:
ssh remotehost '{ sleep 1; reboot -f; } >/dev/null &'
Untuk benar-benar yakin bahwa sisi server berkomitmen untuk menjalankan reboot
, sambil memastikan bahwa itu tidak benar-benar reboot sebelum memberi tahu klien bahwa itu berkomitmen, Anda perlu pemberitahuan tambahan untuk pergi dari server ke klien. Ini bisa berupa output melalui koneksi SSH, tetapi menjadi rumit.