Solusi 1:
Jika Anda menggunakan Bash, Anda dapat menjalankan disown -h job
menyangkal
disown [-ar] [-h] [jobspec ...]
Tanpa opsi, setiap jobspec dihapus dari tabel pekerjaan aktif. Jika
-h
opsi diberikan, pekerjaan tidak dihapus dari tabel, tetapi ditandai sehingga SIGHUP tidak dikirim ke pekerjaan jika shell menerima SIGHUP. Jika jobspec tidak ada, begitu juga dengan-a
maupun-r
opsi disediakan, pekerjaan saat ini digunakan. Jika tidak ada jobspec yang disediakan,-a
opsi berarti menghapus atau menandai semua pekerjaan;-r
opsi tanpa argumen jobspec membatasi operasi untuk menjalankan pekerjaan.
Solusi 2:
Gunakan reptyr
Dari README:
reptyr - A tool for "re-ptying" programs.
-----------------------------------------
reptyr is a utility for taking an existing running program and
attaching it to a new terminal. Started a long-running process over
ssh, but have to leave and don't want to interrupt it? Just start a
screen, use reptyr to grab it, and then kill the ssh session and head
on home.
USAGE
-----
reptyr PID
"reptyr PID" will grab the process with id PID and attach it to your
current terminal.
After attaching, the process will take input from and write output to
the new terminal, including ^C and ^Z. (Unfortunately, if you
background it, you will still have to run "bg" or "fg" in the old
terminal. This is likely impossible to fix in a reasonable way without
patching your shell.)
Beberapa posting blog oleh penulisnya:
- reptyr:Lampirkan proses yang sedang berjalan ke terminal baru
- reptyr:Mengubah terminal pengontrol proses
Solusi 3:
Untuk mencuri proses dari satu tty ke tty Anda saat ini, Anda mungkin ingin mencoba peretasan ini:
http://www.ucc.asn.au/~dagobah/things/grab.c
Diperlukan beberapa pemformatan ulang untuk dikompilasi ke versi Linux/glibc saat ini, tetapi masih berfungsi.
Solusi 4:
Saat proses dimulai, STDIN, STDOUT, dan STDERR terhubung ke sesuatu . Umumnya Anda tidak dapat mengubahnya setelah perintah dimulai. Dalam kasus yang Anda gambarkan, itu mungkin tty yang terkait dengan sesi ssh. nohup cukup banyak ...
command < /dev/null > nohup.out 2>&1
Artinya, setel STDIN ke /dev/null, STDOUT ke file dan STDERR ke STDOUT. Screen melakukan hal-hal yang jauh lebih canggih yang melibatkan penyiapan tty yang langsung ke dirinya sendiri.
Saya tidak tahu cara apa pun untuk secara retroaktif nohup atau menyaring proses yang sedang berjalan. Jika Anda melakukan cd ke /proc/$pid/fd dan melihat apa yang ditunjukkan oleh 0, 1 dan 2.
Anda mungkin beruntung dengan disown, tetapi tidak jika proses mencoba melakukan apa pun dengan STDIN, STDOUT, atau STDERR.
Solusi 5:
Saya hanya bisa memberi Anda "Tidak" sederhana tanpa alasan untuk bagian layar, saya akan tertarik dengan alasan Anda sendiri.
Namun apakah Anda sudah mencoba disown
(bash bawaan)
~ $ echo $SHELL
/bin/bash
~ $ type disown
disown is a shell builtin
~ $ help disown
disown: disown [-h] [-ar] [jobspec ...]
By default, removes each JOBSPEC argument from the table of active jobs.
If the -h option is given, the job is not removed from the table, but is
marked so that SIGHUP is not sent to the job if the shell receives a
SIGHUP. The -a option, when JOBSPEC is not supplied, means to remove all
jobs from the job table; the -r option means to remove only running jobs.