kadang-kadang saya menjalankan aplikasi di gnome-terminal, tetapi kemudian tiba-tiba saya harus me-restart gnome atau sesuatu. Saya kira jawaban untuk pertanyaan ini juga berguna maka saya ingin memutuskan sambungan dari SSH di mana sesuatu terjadi.
Pohon terminal Gnome terlihat seperti ini:
gnome-terminal
bash
some-boring-process
Bisakah saya 'lepas' bash
dari gnome-terminal
(atau lepas some-boring-process
dari bash dan mengarahkan outputnya ke suatu tempat)? Jika saya baru saja membunuh gnome-terminal
, bash
akan dibunuh untuk semua subprosesnya
Jawaban:
Jika
some-boring-process
sedang berjalan di sesi bash Anda saat ini:ctrl-z
memberi Anda bash promptbg
jobs
perintahdisown -h %1
(gantikan nomor pekerjaan yang sebenarnya di sana).Itu tidak melakukan apa-apa untuk mengarahkan output - Anda harus memikirkan itu ketika Anda memulai proses membosankan Anda. [Sunting] Tampaknya ada cara untuk mengarahkan ulang https://gist.github.com/782263
Tapi serius, lihat ke layar. Saya memiliki shell di server jauh yang telah berjalan selama berbulan-bulan.
sumber
screen
kadang - kadang, meskipun memiliki masalah dan saya tidak ingin menggunakannya untuk setiap sesi pesta dalam hidup sayabash: bg: current: no such job
?Inilah yang dibuat untuk layar dan tmux . Anda menjalankan shell di dalam sesi layar / tmux, dan Anda dapat memutuskan / menghubungkan kembali sesuka hati. Anda juga dapat menjalankan beberapa sesi shell di dalam satu terminal gnome.
sumber
screen
memiliki masalah dan saya tidak ingin menggunakannya untuk setiap sesi bash dalam hidup sayascreen
,,tmux
ataudtach
(mungkin dengandvtm
) semuanya bagus untuk ini, tetapi jika itu adalah sesuatu di mana Anda tidak berpikir untuk menggunakan salah satunya, Anda mungkin dapat memanfaatkannohup
.sumber
screen
memiliki masalah dan saya merasa tidak ingin menggunakannya untuk setiap sesi pesta dalam hidup sayanohup
bekerja pada proses yang berjalan dengan menggunakan-p
opsi (jika tersedia)-p
opsinohup
di halaman manual; sistem apa yang Anda pakai?tmux
, saya menggunakan-p
opsi pada kotak Solaris. Saya juga memiliki kenangan samar melakukannya di kotak CentOS mongrel (mungkinzsh
memiliki builtin yang mendukungnya?), Tetapi saya tidak dapat menemukan dokumen tentang hal itu.bash
atauzsh
pada sistem Ubuntu Linux saya memberikannohup
.Jika Anda ingin terus berinteraksi dengan proses anak daripada hanya latar belakang dan terus berjalan, sebenarnya ada program yang disebut retty yang merupakan bukti-konsep untuk "mencuri" proses dari tty saat ini dan menempel kembali ke yang sekarang.
Namun, ia melakukan beberapa hal mengerikan, termasuk menempelkan beberapa kode rakitan ke tumpukan aplikasi yang dipasang kembali. Dan kode itu belum diperbarui untuk x86_64.
Ada program lain yang mengambil pendekatan yang mungkin lebih baik, membekukan proses di ruang pengguna ke file, yang kemudian dapat dipulihkan (mungkin pada tty lain.) Ini cryopid , dan proyek itu juga tampaknya telah berhenti di fase proof-of-concept, dan tidak bekerja dengan Linux modern sebagai kode. Baiklah
Hanya berpikir ini seharusnya ada di sini untuk kelengkapan. Jika Anda tidak keberatan menggunakan voodoo yang mengerikan, ini berada dalam bidang kemungkinan - setidaknya, kemungkinan teoretis.
sumber
Jika saya menjalankan sesuatu yang ingin saya selesaikan tidak peduli apa (singkatnya reboot sistem), saya menggunakan
nohup
dan menjalankannya di latar belakang. Tidak seperti layar dan sejenisnya Anda tidak dapat memasang kembali ke proses. Namun, pengalihan pengalihan di tempat lain output apa pun dapat ditemukan dinohup.out
.Saya menggunakan
screen
ketika saya ingin dapat beralih terminal untuk suatu proses. Seperti memulai proses dari rumah / kerja dan beralih ke yang lain. Seperti keluaran sesi terminal lainnya, gulir akhirnya akan keluar dari bagian atas buffer.EDIT: Jika Anda telah meluncurkan proses, Anda dapat
disown
memproses untuk mencegahHUP
sinyal dikirim ketika proses ditutup.sumber
screen
memiliki masalah dan saya merasa tidak ingin menggunakannya untuk setiap sesi pesta dalam hidup sayaAnda dapat membuat proses (PID) tidak menerima sinyal HUP ketika sesi terminal berakhir. Gunakan perintah berikut:
sumber
nohup: invalid option -- 'p'
. Versi apanohup
yang Anda jalankan pada sistem seperti apa?-p
pilihan di Linux, jadi jawaban ini khusus untuk Solaris dan AIX. Senang tahuScript ini melepaskan proses anak dari orang tua dan menugaskannya ke proses init :
sumber