Como posso dizer a um processo em execução para desconsiderar o SIGHUP? [duplicado]

9

Eu tenho um "servidor" muito low-end rodando Debian Squeeze que ocasionalmente ssh para. O sistema tende a ser lento, e. executar apt-cache search pode levar meio minuto. Ocasionalmente, acho que não posso esperar que um processo seja concluído (estou no meu laptop e preciso ir a algum lugar).

Se eu tivesse originalmente iniciado o processo com nohup ou dentro de screen , isso não seria problema. Mas como posso fazer com que um processo já em execução continue, apesar do meu logoff?

    
por dancek 12.11.2011 / 15:55

2 respostas

10

Supondo que você esteja usando bash, ksh, zsh ou outro shell semelhante, você pode fazer o processo em segundo plano e executar disown . Especificamente, em bash você provavelmente deseja disown -h .

Da página de ajuda do bash em disown :

disown: disown [-h] [-ar] [jobspec ...]
    Remove jobs from current shell.

    Removes each JOBSPEC argument from the table of active jobs.  Without
    any JOBSPECs, the shell uses its notion of the current job.

    Options:
      -a        remove all jobs if JOBSPEC is not supplied
      -h        mark each JOBSPEC so that SIGHUP is not sent to the job if the
        shell receives a SIGHUP
      -r        remove only running jobs

    Exit Status:
    Returns success unless an invalid option or JOBSPEC is given.
    
por 12.11.2011 / 16:22
6

Se você usar bash ou zsh, use o disown embutido antes de efetuar logoff.

De man zshall :

   disown [ job ... ]
   job ... &|
   job ... &!
          Remove the specified jobs from the job table; the shell will  no
          longer  report their status, and will not complain if you try to
          exit an interactive shell with them running or stopped.   If  no
          job is specified, disown the current job.
    
por 12.11.2011 / 16:23

Tags