Você pode tentar usar setsid
(parte do pacote util-linux
)
no .xinitrc
para iniciar o script em uma nova sessão:
setsid statusbar
mas ainda receberá seus sinais?
Eu tenho uma barra de status (barra de limão) para a qual canalizo a saída de alguns scripts (tempo, bateria, volume, etc.). Esses scripts e a própria barra de status são iniciados em um único script bash statusbar
. Quando o processo statusbar
é eliminado, ele é limpo depois de tentar matar seus filhos, assim:
trap "trap - SIGTERM && kill -- -$$" SIGINT SIGTERM EXIT
Isso tudo funciona bem se eu chamar statusbar
em um terminal e, em seguida, sair com um sinal SIGTERM.
No entanto, quando eu inicio statusbar
no meu arquivo .xinitrc
da seguinte forma: statusbar &
, o script statusbar
não pode mais se limpar depois de si mesmo. O motivo para isso é que ele está no mesmo grupo de processos que o script .xinitrc
, junto com todos os outros processos iniciados lá. Descobri isso seguindo esta resposta.
A pergunta é: posso colocar o processo statusbar
e todos os seus filhos em seu próprio grupo de processos a partir de .xinitrc
, para que ele possa se limpar bem? Alternativa, talvez haja uma maneira diferente de matar todos os filhos de statusbar
P.S .: Eu percebo que querer matar uma barra de status não é muito comum. No entanto, eu gostaria de fazer isso para que eu possa reiniciá-lo facilmente e, eventualmente, alterar o meu tema de cor dinamicamente, sem ter que sair do X.
Tags process xinit shell process-groups