Como desvincular um processo de uma shell

Posted . Visible to the public.

Normalmente, os processos criados em um terminal (shell) são atrelados ao processo da própria shell ao serem criados. Isso faz com que, por exemplo, um processo do tomcat seja morto se a shell for morta. Outro detalhe é que se executado normalmente esse processo do tomcat irá "travar" aquela sessão da shell pra si mesmo.
Existem maneiras de criar processos não vinculados à shell, algumas delas são:\

  • Executá-lo com ampersand ('&') no final, para que ele seja 'forkado' da shell atual. Dessa maneira ele irá pra background automaticamente, e seu PID não será atrelado ao PID da shell. Por exemplo:
    java -jar Aplicacao.jar &
  • Após ter executado o processo (e já tê-lo atrelado à shell), colocá-lo em background e tornar órfãos os filhos da shell:
    java -jar Aplicacao.jar
    Nesse momento, pressione Ctrl + Z para colocar o processo em sleep.
    Faça-o executar em background com o comando:
    bg
    E torne-o órfão:
    disown
    A partir de então é possível terminar a shell sem terminar o processo (ou seja, é possível executar exit).
Frederico Galvão
Posted by Frederico Galvão to ZeroGlosa (2012-06-15 12:15)