GNU/Linux >> Znalost Linux >  >> Linux

Mohu nohup/zobrazit již spuštěný proces?

Řešení 1:

Pokud používáte Bash, můžete spustit disown -h job

odmítnout

disown [-ar] [-h] [jobspec ...]

Bez voleb bude každá specifikace úlohy odstraněna z tabulky aktivních úloh. Pokud -h Pokud je zadána volba, úloha se neodstraní z tabulky, ale je označena, takže pokud shell přijme aSIGHUP, nebude do úlohy odeslán SIGHUP. Pokud není přítomen jobspec, a ani -a ani -r Pokud je volba dodána, použije se aktuální úloha. Pokud není zadána žádná specifikace úlohy, -a možnost znamená odstranit nebo označit všechny úlohy; -r volba bez argumentu ajobspec omezuje operaci na spuštěné úlohy.

Řešení 2:

Použijte reptyr

Ze souboru 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.)

Několik blogových příspěvků jeho autora:

  • reptyr:Připojte běžící proces k novému terminálu
  • reptyr:Změna řídicího terminálu procesu

Řešení 3:

Chcete-li ukrást proces z jednoho tty do vašeho současného tty, můžete zkusit tento hack:

http://www.ucc.asn.au/~dagobah/things/grab.c

Potřebuje nějaké přeformátování, aby se dal zkompilovat na aktuální verze Linux/glibc, ale stále funguje.

Řešení 4:

Při spuštění procesu jsou STDIN, STDOUT a STDERR připojeny k něčemu . Po spuštění příkazu to obecně nemůžete změnit. V případě, který popisujete, je to pravděpodobně tty spojený s relací ssh. nohup do značné míry dělá ...

command < /dev/null > nohup.out 2>&1

To znamená, že nastaví STDIN na /dev/null, STDOUT na soubor a STDERR na STDOUT. Screen dělá mnohem sofistikovanější věci, včetně nastavení ttys, které nasměrují na sebe.

Nevím o žádném způsobu, jak zpětně nohup nebo screening běžícího procesu. Pokud cd do /proc/$pid/fd a uvidíte, na co ukazují 0, 1 a 2.

Možná budete mít štěstí s odmítnutím, ale ne v případě, že se proces pokusí něco udělat s STDIN, STDOUT nebo STDERR.

Řešení 5:

Mohu vám dát pouze prosté "Ne" bez důvodu pro část obrazovky, mě by zajímal důvod, tebe.

Zkoušeli jste však disown (vestavěný bash)

~ $ 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. Ssh – Jak zrušit běžící proces a přiřadit jej k novému prostředí obrazovky?

  2. Jak zastavit proces obrazovky v linuxu?

  3. Proč nemohu tento proces v Linuxu zabít?

  1. Možnosti příkazu nohup v Linuxu

  2. Může proces běžet bez ohledu na jakýkoli shell?

  3. Mohu slepě věřit 127.0.0.1?

  1. Použil jsem Ctrl-Alt-F6 v Linuxu a nemohu obnovit obrazovku

  2. Jak mohu zabít proces podle jména místo PID?

  3. Mohu použít GDB k ladění běžícího procesu?