Jika tugas Anda sudah diluncurkan, sudah terlambat *
untuk mempertimbangkan solusi alternatif yang menyisipkan lapisan tambahan antara Anda ssh
sesi dan shell menjalankan perintah, seperti screen
, tmux
, byobu
, nohup
dan sejenisnya.
Jika proses Anda mendukung untuk ditempatkan di latar belakang dan terutama tidak menggantung kapan stdout
dan stderr
tidak dapat ditulis / ditutup, Anda dapat meletakkannya di latar belakang sebelum keluar dengan ControlZdan bg
kemudian lepaskan dari shell Anda dengan disown
builtin.
misalnya:
$ ssh localhost
You have new mail.
Last login: Fri Jun 6 11:26:56 2014
$ /bin/sleep 3600
^Z[1] + Stopped /bin/sleep 3600
$ bg
[1] /bin/sleep 3600&
$ jobs
[1] + Running /bin/sleep 3600
$ disown %1
$ exit
Connection to localhost closed.
$ ps -ef|grep sleep
jlliagre 12864 1 0 21:12 ? 00:00:00 /bin/sleep 3600
jlliagre 13056 12477 0 21:13 pts/18 00:00:00 grep sleep
$
*
Seperti yang dikomentari Bob, sebenarnya ada beberapa cara hack untuk memperbaiki sesi tty di Linux. repty, retty , injcode dan neercs . Terlihat paling canggih untuk reptyr tetapi Anda mungkin perlu hak akses root untuk mengaktifkan ptrace untuk meretas proses Anda.
disown
perintah. Ini dikembalikan: bash: peringatan: menghapus pekerjaan yang dihentikan 1 dengan grup proses 24876. Sekarang pekerjaan saya terdaftarps -all
tetapi tampaknya tidak berfungsi (penggunaan CPU adalah 0%)disown
perintahbg
perintah itu diperlukan di bagian pertama dari balasan saya. Diedit.kill -CONT
yang kira-kira sama dengan yang dilakukan bg.Salah satu solusinya adalah menggunakan layar GNU . Anda dapat memulai
screen
, menjalankan perintah, lalu melepaskanC-a d
. Kemudian, untuk menyambung kembali, lakukanscreen -r
, dan Anda kembali ke sesi sebelumnya.Manfaat lain dari layar adalah manajemen jendela (sehingga Anda dapat beralih ke shell lain saat perintah Anda sedang berjalan, tanpa memerlukan koneksi SSH baru), dan itu memungkinkan perintah Anda untuk tetap berada di latar depan, baik dalam sesi saat ini atau nanti.
Sunting: Seperti disebutkan dalam komentar, ini hanya akan berfungsi jika Anda ingat untuk memulai
screen
sebelum menjalankan perintah. Jika perintah sudah berjalan, maka Anda membutuhkan solusi @ jlliagre.sumber
tmux
adalah program lain sepertiscreen
itu yang memungkinkan Anda memiliki sesi jarak jauh yang tidak terikat dengan koneksi SSH Anda saat ini.screen
.screen
atautmux
.)Salah satu cara "standar" untuk melakukannya, adalah dengan menggunakan
nohup
perintah, termasuk dalamcoreutils
, seperti ini:Tetapi perintah itu akan mengarahkan output (
STDOUT
&STDERR
AFAIK) dari program ke dalam filenohup.out
, membuatnya kadang-kadang menjengkelkan (seperti menghasilkan file log besar), jadi Anda mungkin ingin membuat pengalihan sendiri, atau mengarahkannya ke / dev / null jika kamu mau.sumber
nohup
bisa digunakan untuk ini. Tangguhkan saja proses yang sedang berjalan dan kirim ke latar belakang (Ctrl
+Z
dan jalankanbg
) lalu Anda dapat menerbitkannohup %1
.Selain itu,
nohup
Anda dapat meluncurkan proses di latar belakang menggunakan "&" dan subkulit:Sufiks perintah dengan & dan bungkus dalam tanda kurung
Katakanlah proses Anda mendapatkan pid 1922:
Terlihat bahwa itu tidak terikat dari proses shell 11473 yang merupakan induk aslinya. Jadi, jika Anda keluar atau membunuh shell saat ini (11473), proses 11922 terus berjalan, dan itu akan terputus dari Poin.
Cobalah untuk keluar dari shell, dan masukkan shell baru. Meskipun, shell ini terhubung ke Poin yang sama, Anda dapat melihat prosesnya sekarang tanpa Poin:
Saya tidak tahu bagaimana namanya atau didokumentasikan di Posix, tapi saya menggunakan cara ini sejak 1990 di bsh, ksh dan sekarang di bash.
Terakhir, Anda dapat menggunakan
bg
perintah shell builtin:Cukup luncurkan program Anda dan jika Anda memutuskan untuk menjeda, atau berencana untuk menyimpannya di latar belakang, ketik CTRL + Z:
Sekarang biarkan terus berjalan di latar:
Jika Anda melihat ke proses info, ini belum memiliki proses induk:
Jadi, keluar dari proses saat ini. Proses yang berjalan di latar belakang tidak terikat dari induk aslinya dan tetap berjalan di latar belakang:
Login lagi dan lihat info proses:
sumber