Solusi 1:
Mencoba menyambungkan deskriptor file STD* terminal baru saat ini ke proses lama yang sedang berjalan hanya akan menimbulkan masalah. Bahkan jika Anda berhasil melakukannya, kontrol pekerjaan terminal tidak akan berfungsi seperti yang diharapkan. Anda akan memiliki kekacauan yang tertinggal jika Anda akhirnya keluar dari program yang diambil alih, dan apa yang terjadi pada shell yang mengorbankan deskriptor file untuk diserahkan ke proses yang baru dilatarbelakangi. Akankah ssh tetap terbuka saat cangkang itu hilang? Mungkin tidak. Jadi, Anda harus mengalihkannya ke tempat lain terlebih dahulu.
Mungkin atau tidak, saya berani bertaruh bahwa lebih baik membiarkan proses yang ditinggalkan terbunuh "secara alami". Jika Anda melakukan sesuatu yang cukup penting untuk dibenarkan mencoba melakukan semua peretasan yang diperlukan untuk melanjutkan kontrol dan Anda berada di tautan yang tidak stabil, Anda mungkin harus mengetahuinya terlebih dahulu dan cukup gunakan layar (atau vnc, atau apa pun yang mengapungkan perahu kendali terpisah Anda). :)
Solusi 2:
Saya tahu ini adalah pertanyaan lama , tetapi saya merasa penting untuk menambahkan temuan saya jika ada orang lain yang menemukan ini seperti saya.
Saya belum melihat konsekuensi yang tidak biasa untuk melakukan ini ya, tapi inilah yang saya gunakan dan berhasil dengan luar biasa. Terkadang ketika kita menjalankan proses yang panjang di server kita, terkadang sesi ssh akan terputus. Proses bersama dengan sesi tty tampaknya tetap berjalan tetapi kami tidak dapat menyambungkannya kembali. Saya menemukan program di bawah untuk menarik proses ke sesi yang baru terhubung.
https://github.com/nelhage/reptyr
Berikut info lebih lanjut
https://blog.nelhage.com/2011/02/changing-ctty/
Solusi 3:
Secara umum, cara yang tepat untuk menangani hal ini adalah mempersiapkannya jauh-jauh hari, menggunakan GNU screen
atau nohup
bash atau disown
mekanisme. Jika Anda menggunakan tcsh
, shell akan menolak pekerjaan latar belakang saat keluar secara tidak normal.
Jika Anda tidak menggunakan screen
tetapi telah berhasil membuat proses Anda tetap berjalan melalui salah satu disown metode, Anda mungkin dapat memalsukan penyambungan kembali ke proses dengan gdb
(sumber):
[...] dengan beberapa peretasan kotor, tidak mungkin membuka kembali proses stdout/stderr/stdin. [...]
Dan kemudian gunakan gdb misalnya untuk melampirkan ke proses, lakukan beberapa panggilan tutup (0)
tutup panggilan (1)
tutup panggilan (2)
panggil buka("/dev/pts/xx", ...)
panggil dup(0)
panggil dup(0)
lepaskan
Sekarang, Anda harus men-tweak proses ini untuk situasi Anda. Saya ragu akan membantu jika Anda tidak berhasil menyangkal proses. Jika Anda menggunakan bash
, lihat postingan ini tentang membuat bash secara otomatis menyangkal proses latar belakang saat keluar (pada dasarnya, matikan huponexit dengan belanja ). Dengan proses latar depan, Anda harus menggunakan nohup .