Saya sedang melakukan beberapa uji coba skrip migrasi data yang berjalan lama, melalui SSH. Katakanlah saya mulai menjalankan skrip sekitar jam 4 sore; sekarang, 18:00 gulungan sekitar, dan aku mengutuk diriku sendiri karena tidak melakukan ini semua di screen
.
Apakah ada cara untuk "secara surut" nohup
proses, atau apakah saya harus meninggalkan komputer saya online sepanjang malam? Jika tidak mungkin untuk melampirkan screen
/ nohup
proses yang sudah saya mulai, lalu mengapa? Ada hubungannya dengan bagaimana proses orang tua / anak berinteraksi? (Saya tidak akan menerima jawaban "tidak" yang setidaknya tidak menjawab pertanyaan 'mengapa' - maaf;))
disown
. blogs.oracle.com/ksplice/entry/disown_zombie_children_and_theJawaban:
Jika Anda menggunakan Bash, Anda dapat menjalankan
disown -h job
sumber
disown %1
jika 1 adalah jobspec, tidak seperti fg atau bg di mana Anda hanya menggunakanbg 1
serverwatch.com/tutorials/article.php/3935306/…Gunakan reptyr
Dari README:
Beberapa posting blog dari penulisnya:
sumber
Untuk mencuri proses dari satu tty ke tty Anda saat ini, Anda mungkin ingin mencoba hack ini:
http://www.ucc.asn.au/~dagobah/things/grab.c
Perlu beberapa format ulang untuk mengkompilasi ke versi Linux / glibc saat ini, tetapi masih berfungsi.
sumber
Ketika suatu proses dimulai, STDIN, STDOUT dan STDERR terhubung ke sesuatu . Secara umum Anda tidak dapat mengubah itu setelah perintah dimulai. Dalam kasus yang Anda gambarkan, itu mungkin tty terkait dengan sesi ssh. nohup cukup banyak hanya ...
Yaitu, set STDIN ke / dev / null, STDOUT ke file dan STDERR ke STDOUT. Layar melakukan hal-hal yang jauh lebih canggih yang melibatkan pengaturan yang langsung ke dirinya sendiri.
Saya tidak tahu cara apa pun untuk menutup atau menyaring proses berjalan secara surut. Jika Anda melakukan cd ke / proc / $ pid / fd dan lihat apa maksud 0, 1 dan 2.
Anda mungkin memiliki sedikit keberuntungan dengan penolakan, tetapi tidak jika proses mencoba melakukan sesuatu dengan STDIN, STDOUT atau STDERR.
sumber
Cryopid adalah pengembangan lebih lanjut dari penulis grab.c yang membekukan suatu proses menjadi file, yang kemudian Anda jalankan (layar bagian dalam) untuk melanjutkan proses.
sumber
Saya hanya bisa memberi Anda "Tidak" sederhana tanpa alasan untuk bagian layar, saya akan tertarik pada alasannya sendiri.
Namun, apakah Anda sudah mencoba
disown
(bash builtin)sumber
nohup di Solaris / OpenSolaris memiliki flag -p untuk nohup proses yang sedang berjalan - misalnya, lihat halaman manual Solaris 10 nohup .
sumber
Baru-baru ini saya melihat tautan ke neercs , yang merupakan utilitas seperti layar yang dibuat menggunakan libcaca, pustaka ascii-art warna. Di antara fitur-fitur lain, ia menawarkan kemampuan untuk mengambil proses yang ada dan kembali menjadi orang tua di dalam sesi (layar) neercs Anda.
Saya belum menggunakannya, jadi saya tidak bisa mengomentari apakah itu berfungsi atau tidak.
sumber
Saya mungkin sedang memikirkan ini, jadi jangan ragu untuk mengoreksi saya (saya sudah belajar tentang penolakan!) ... Tidakkah ctrl-Z dan "bg" bekerja setidaknya untuk menjalankan proses di latar belakang? Atau apakah masalah utama yang Anda masih ingin melihat STDOUT saat berjalan?
sumber
Jika Anda dapat hidup dengan tidak dapat berinteraksi dengan proses dan Anda tidak keberatan memuat modul kernel acak, Anda bisa melakukan lebih buruk daripada melihat Snoop . Atau, ada beberapa proyek lain. Berikut ini adalah satu kode panggilan, yang sebagian besar dapat melakukan apa yang ingin Anda lakukan.
sumber
Anda dapat mengarahkan proses keluaran ke file dengan gdb
https://blog-en.openalfa.com/how-to-detach-from-the-terminal-a-running-process-in-linux
dan kemudian menolaknya
Upd: Saya harus menjalankan gdb dengan sudo dan perintah gdb yang sedikit berbeda di Ubuntu 18.04:
p (int)dup2(open("/tmp/test.stdout", 1), 1)
sumber
Saya ingin menggunakan
nohup
(atau serupa) untuk memulailinks
browser baris perintah dan melampirkan setelah mengunduh file dari situs web ASP.NET dengan proses otentikasi yang rumit dan banyak keadaan tersembunyi yang membuatnya sulit digunakan melakukan pekerjaan. dengancurl
/wget
.Saya akhirnya menggunakan
tmux
yang memecahkan pekerjaan dengan sangat baik:tmux
links
dalam kasus saya) dan biarkan berjalantmux attach
untuk membawa aplikasi kembali ke layarsumber
Apakah Anda khawatir tentang waktu sesi habis? Dalam hal ini Anda bisa Ctrl-z dan bg proses, dan kemudian hanya meletakkan sesuatu untuk menjaga sesi tetap hidup seperti "ping -t localhost" atau "top".
Jika Anda ingin keluar, maka saya khawatir saya tidak dapat menambahkan komentar lainnya.
sumber