Um pouco de solução alternativa:
jobs &>/dev/null
cmd &
new_job_started="$(jobs -n)"
if [ -n "$new_job_started" ];then
VAR=$!
else
VAR=
fi
Graças ao comentário do @ terdon por direcionar minha atenção para help jobs
.
Estou escrevendo um script bash 4.1 ...
Qualquer um desses trabalhos funciona se o trabalho de backround sempre começar ...
cmd &
VAR=$!
or...
( cmd & ); VAR=$!
Se cmd
for executado, o pid do último comando iniciado ($!) será o desejado e o $ VAR estará correto.
No entanto, se cmd
não for iniciado, $ VAR será o pid do último comando anterior iniciado, que pode ser o pid do primeiro plano script em si. Já que eu preciso do pid de cmd
para o propósito de matar o processo sob certas condições mais tarde, possivelmente obter o pid errado simplesmente não funcionará.
O que eu realmente preciso é que o VAR só seja alterado se o trabalho em segundo plano for executado. Algo parecido com o sintaticamente incorreto ...
VAR=
( cmd & ); && VAR=$!
Os comentários e a resposta de Joseph R foram muito úteis. Para o benefício de qualquer pessoa com um problema semelhante ...
A seguinte função bash executa o script GtkDialog standby
no plano de fundo. Estar dentro de uma função, que é executada em um subprocesso, parece fornecer o isolamento necessário para evitar o PID do script de chamada em vez do PID do script standby
se standby
falhar ...
function standbyBg () {
ifHelpShow "$1" 'standbyBg
Run standby (busy "throbber") in background and echo its pid.
Example:
standbyPID=$(standbyBg)
Revised:
20131123 docsalvage' && return
#
standby >/dev/null 2>&1 &
echo $!
}
Um pouco de solução alternativa:
jobs &>/dev/null
cmd &
new_job_started="$(jobs -n)"
if [ -n "$new_job_started" ];then
VAR=$!
else
VAR=
fi
Graças ao comentário do @ terdon por direcionar minha atenção para help jobs
.
Tags bash background-process pid