use exec -a para nomear o processo, mas execute-o em segundo plano, imune a CTRL-C

1

Eu gostaria de iniciar um processo em background a partir do script bash, mas ao mesmo tempo dar a ele outro nome e torná-lo imune a CTRL - C . Eu tentei o seguinte:

exec -a NiceName java -cp ....long java command line &
tail -f logs/the.log

Eu quero que o exec forneça ao processo outro nome além de apenas java . Eu quero iniciá-lo em segundo plano para poder executar imediatamente a cauda nos logs do processo para verificar a inicialização.

Isso funciona até eu pressionar CTRL - C para parar o script / tail porque o SIGINT é passado para o processo java que termina também.

Eu também tentei combinações de (exec ...&) e (exec ...)& . O que funciona é

exec bash -c "java command line escaping hell&"
tail -f logs/the.log

mas eu espero que haja maneira sem escapar do inferno. Eu também tentei coisas com disown sem sucesso.

Se eu remover o exec , o subprocesso estará imune a CTRL - C , mas eu não posso dar um nome a ele.

    
por Harald 02.01.2016 / 13:00

1 resposta

1

Depois de mais algumas experiências, descobri o jeito de fazer isso:

(trap "" SIGINT; exec -a NiceName java -cp ....long java command line &)
tail -f logs/the.log

Ignorar o SIGINT no subshell é herdado pelo comando exec ed java . O primeiro plano executando bash / tail ainda pode ser terminado com CTRL-C.

    
por 02.01.2016 / 13:32