GNU/Linux >> Belajar Linux >  >> Linux

Bisakah saya nohup/screen proses yang sudah dimulai?

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.

Linux
  1. Opsi Perintah nohup di Linux

  2. Menggunakan Ctrl-Alt-F6 di Linux, dan tidak bisa mengembalikan layar saya

  3. Bagaimana cara menghentikan proses layar di linux?

  1. Bisakah exit() gagal menghentikan proses?

  2. Apa yang harus dilakukan ketika Ctrl + C tidak dapat menghentikan proses?

  3. Bisakah saya melanjutkan proses vim yang ada?

  1. Ssh – Bagaimana Cara Menyangkal Proses yang Berjalan Dan Mengaitkannya ke Shell Layar Baru?

  2. Bagaimana saya bisa mematikan proses dengan nama, bukan PID?

  3. Bagaimana cara memulai beberapa sesi layar secara otomatis?