Suponha que este comando invoque um aplicativo da linha de comando do terminal MacOS:
/Applications/Matlab_R2020a.app/bin/matlab
O terminal não será mais capaz de aceitar comandos e o MATLAB será dependente (ou seja, será encerrado se o console do terminal for fechado). Como se chama essa dependência e como a aplicação pode ser iniciada para que fique "independente"? Ou seja, fechar o terminal não fechará o aplicativo?
A dependência seria
matlab
gerada como um processo filho do seu shell, que por sua vez é um processo filho do seu aplicativo emulador de terminal.Agora, não é isso que faz
matlab
exit quando seu shell sai/é encerrado.O próprio shell possui um gancho que percebe que está prestes a terminar e enviará um sinal de "desligamento" (como ao desligar o telefone),
SIGHUP
para o(s) processo(s) que ele gerou. A menos que o seu processo (ou seja,matlab
) tenha instalado um manipulador específico para aquele sinal que o interrompa, ou tenha dito explicitamente que irá ignorar esse sinal, ele será encerrado.Portanto, o relacionamento entre
matlab
e seu shell é parental , mas o que sai do matlab é uma intervenção explícita do shell.A resposta de Romeo mostra como contornar isso: em vez de lançar
matlab
, você pode lançar onohup
programa, o que por si só não faz muito – ele apenas declara que ignora o sinal de desligamento e lança o programa que você especificou como argumento, substituindo-se. (Ele também dobra a entrada e a saída padrão, se desejado.)Para executar o comando e desanexá-lo do terminal, a prática usual do UNIX/Linux é usar algo como:
nohup
desanexe-o do terminal&
coloque em segundo plano(é claro, substitua
<command>
pelo nome do seu comando, como/Applications/Matlab_R2020a.app/bin/matlab
)A construção
>out_log
armazena em arquivoout_log
a saída do programa, enviada para STDOUT. A construção2>err_log
armazena em arquivoerr_log
a saída do programa, enviada ao STDERR. É uma boa prática manter essas informações e armazená-las em um arquivo separado em caso de necessidade de alguma depuração, investigação, etc.