como converter um processo em execução em um nohup e manter um arquivo de log

2

Eu tenho um processo atualmente ocupando um terminal

]$ command some_argument

Eu quero sair do terminal e ir para casa, mas nesse meio tempo eu não quero matar esse processo em execução.

Para o processo de execução acima, quero alcançar algo como o seguinte:

]$ nohup command some_argument >& logfile &
    
por iamauser 21.08.2013 / 22:51

3 respostas

5

Desprezar o processo e redirecionando o STDOUT de um processo já em segundo plano não é viável para a maioria dos usuários. Essa resposta do SO aborda bem o assunto.

Desassociar o processo do shell atual não é tão difícil: você está procurando por disown . A partir do manpage:

SIGNALS

....

       The shell exits by default upon receipt of a SIGHUP.   Before  exiting,
       an  interactive  shell  resends  the  SIGHUP  to  all  jobs, running or
       stopped.  Stopped jobs are sent SIGCONT to ensure that they receive the
       SIGHUP.   To  prevent the shell from sending the signal to a particular
       job, it should be removed from the jobs table with the  disown  builtin
       (see  SHELL  BUILTIN  COMMANDS  below)  or marked to not receive SIGHUP
       using disown -h.

....

SHELL BUILTIN COMMANDS

....

       disown [-ar] [-h] [jobspec ...]
              Without options, each jobspec  is  removed  from  the  table  of
              active  jobs.   If jobspec is not present, and neither -a nor -r
              is supplied, the shell's notion of the current job is used.   If
              the -h option is given, each jobspec is not removed from the ta‐
              ble, but is marked so that SIGHUP is not sent to the job if  the
              shell  receives a SIGHUP.  If no jobspec is present, and neither
              the -a nor the -r option is supplied, the current job  is  used.
              If no jobspec is supplied, the -a option means to remove or mark
              all jobs; the -r option without  a  jobspec  argument  restricts
              operation  to running jobs.  The return value is 0 unless a job‐
              spec does not specify a valid job.

Se você quiser saber mais sobre o que o nohup e o disown realmente fazem, consulte este questão. (disclaimer: auto-promoção sem vergonha)

    
por 21.08.2013 / 23:31
0

Eu entendo que você está usando um sistema operacional baseado em Linux, mas para o caso de alguém usar o Solaris 10 ou mais recente encontrar esta página enquanto procura uma solução, o Solaris nohup implementa o que você está procurando:

$ command some_argument
...
^Z[1] + Stopped (SIGTSTP)        command some_argument
$ bg
[1]     command some_argument&
$ jobs -l
[1] + 1061       Running                 command some_argument
$ nohup -p 1061
Sending output to nohup.out
$ exit
    
por 22.08.2013 / 00:27
-1

Parece que você está perto:

 nohup sh custom-script.sh > custom-out.log &

De aqui

    
por 21.08.2013 / 23:02