Memindahkan proses yang sudah berjalan ke Screen

222

Pekerjaan kantor saya secara rutin melihat saya terhubung ke kotak Linux melalui VNC.

Kadang-kadang saya memulai pekerjaan jarak jauh di konsol, dan kemudian menyadari bahwa itu berjalan jauh lebih lama dari yang diharapkan. (Seharusnya memulai yang di bawah Layar di tempat pertama ...)

Saya tidak ingin membiarkan workstation saya bekerja semalaman hanya untuk menjaga sesi VNC terbuka; Saya ingin memindahkan pekerjaan jarak jauh yang sudah berjalan ke sesi Layar (pada kotak jarak jauh), sehingga saya dapat mematikan workstation (dan menghubungkan kembali keesokan paginya).

Bagaimana ini bisa dilakukan, jika sama sekali?

DevSolar
sumber

Jawaban:

217

Lihatlah reptyr , yang melakukan hal itu. Halaman github memiliki semua informasi.

reptyr - Alat untuk program "re-ptying".

reptyr adalah utilitas untuk mengambil program yang sedang berjalan dan melampirkannya ke terminal baru. Memulai proses yang berjalan lebih lama dari ssh, tetapi harus pergi dan tidak ingin menyela? Mulai saja layar, gunakan reptyr untuk meraihnya, lalu matikan sesi ssh dan langsung menuju rumah.

PEMAKAIAN

PID reptyr

"reptyr PID" akan mengambil proses dengan id PID dan melampirkannya ke terminal Anda saat ini.

Setelah melampirkan, proses akan mengambil input dari dan menulis output ke terminal baru, termasuk ^ C dan ^ Z. (Sayangnya, jika Anda latar belakang, Anda masih harus menjalankan "bg" atau "fg" di terminal lama. Ini kemungkinan tidak mungkin untuk diperbaiki dengan cara yang wajar tanpa menambal shell Anda.)

Dave Johnston
sumber
22
Jika, seperti saya, Anda melihat tautan di atas dan sebentar mempertimbangkan untuk menginstal program dari sumber, ambil hati: itu hanya apt-getjauh dari sistem Debian.
mlissner
3
Ini bekerja dengan baik, bagaimana saya belum pernah melihat ini sebelumnya?
deed02392
3
Ini luar biasa! Saya akan mengulanginya 10 kali jika saya bisa! Reptyr juga tersedia di repo RedHat. Hanya 'yum instal' untuk mendapatkannya.
Mark J. Bobak
5
Tidak berfungsi kecuali dalam kasus yang paling sepele:Unable to attach. (This most commonly means that 11690 has a suprocesses)
Mehrdad
2
Setidaknya sebagai root, Anda dapat menggunakanreptyr -T PID
ChristophK
45

Anda tidak dapat melakukan ini dengan mudah. Saya sarankan biasakan untuk memulai layar sebagai hal pertama yang Anda lakukan setelah membuka konsol.

Namun, untuk masalah Anda yang sebenarnya, ada hal lain yang bisa Anda coba: setelah meluncurkan pekerjaan Anda dari terminal, latar belakang dengan mengetikkan ctrl-z lalu bg. Setelah itu, lepaskan pekerjaan dari shell induknya; di bash Anda akan melakukannya disown -h %<jobid>. Setelah itu, Anda dapat menutup terminal dengan aman dan pekerjaan akan terus berjalan.

pangeran
sumber
3
Ini bekerja sangat baik untuk kasus saya. reptyr dan retty gagal mengambil proses, tetapi yang saya butuhkan hanyalah menutup terminal dan membiarkan proses berjalan.
STW
10
FYI: setelah memungkiri -ing proses itu dapat reptyr -ed dalam layar .
Adam
1
Ini membunuh program saya yang sedang berjalan :(
Mehrdad
39

Saat Anda menggunakan Linux, bagaimana dengan menggunakan retty di dalam proses layar yang baru diluncurkan?

$ screen -S my_process
$ retty $(pgrep my_process)
/redraw

HTH

tepuk tangan,

Rob Wells
sumber
1
Tidak tahu retty, terima kasih. Namun, untuk jenis pekerjaan jangka panjang yang ada dalam pikiran saya, saya agak enggan untuk menggunakan alat yang menyebut dirinya sebagai "sangat ringan diuji". Saya pergi dengan solusi earl.
1
tidak melihat retty di Gentoo
Sergei
tidak dapat melampirkan ke 4858
Arnold Roa