Eu localizei vários tópicos semelhantes a este que considera o uso de xdotool e wmctl para testar o lançamento de um aplicativo persistente em janelas ou outro subprocesso persistente. Mas usá-los parece ser uma complicação desnecessária. A solução abaixo permitiria a execução condicional de um subprocesso persistente. Utiliza uma duração de sono de meio segundo. Se o subprocesso de interesse exigir mais tempo para o lançamento bem-sucedido, essa duração precisará ser aumentada de acordo.
Arquivo de origem do Bash lançamento
#/usr/bin/env bash
# launch : will allow launching a windowed application or persistent
# sub-process in the background so that conditional execution can be
# applied to determine whether or not it has launched successfully -
# dependencies: GNU coreutils (sleep), util-Linux (kill)
# usage: ./launch process arg_1 .. arg_n && echo TRUE || echo FALSE
$@ &>/dev/null & sleep 0.5 && kill -0 $! 2>/dev/null
# end file
Para que:
$ ./launch mupdf example.pdf && echo TRUE || echo FALSE
TRUE
$ ./launch mupdf nofile.pdf && echo TRUE || echo FALSE
FALSE
Como pós-escrito para essa informação, achei que seria útil incluir o conselho de mikeserv nos comentários para o post de abertura.
Considerando que a construção acima realiza a tarefa imediata, mikeserv aponta que poderia levar a outros problemas, pois não propaga o sinal para o script de chamada; Em vez disso, ele ignora e descarta. Esta é uma observação muito importante.
Os sinais são um elemento-chave da comunicação entre processos e podem levar à possibilidade de scripts orientados por eventos. Portanto, para scripts mais robustos e eficazes, mikeserv sugere o seguinte para capturar o sinal para que ele possa ser propagado:
{ mupdf some.pdf || kill -"$(($?&127))" "$$"; } &
onde $?&127
permite a ação de 1 a 128 sinais possíveis (POSIX), meu sistema Debian possui 64, então a máscara de sinal pode ser $?&63
.
Assim como uma observação final, para scripts muito simples, onde a comunicação entre processos não é de interesse, o lançamento proposto pode ser útil, mas para qualquer coisa mais, especialmente onde a comunicação entre processos é importante, e propagar) o sinal, conforme recomendado por mikeserv .