Alterando variáveis em um processo bifurcado de fora desse fork?

2

Em teoria, com este bloco, você deve ver apenas "executando ..." uma vez (ou menos), mas, na prática, ele repete até ser morto manualmente. Como eu mudo o valor de x dentro do processo forjado para false de fora do processo forjado depois que a função "start" é chamada?

export x=true
start() {
while [ $x == true ]; do
    echo running...
    sleep 1
done
}

start &
x=false
    
por anonymouse 05.01.2015 / 15:48

2 respostas

3

A solução simples aqui é usar algum tipo de comunicação entre processos para informar ao processo de destino para fazer a mudança. Por exemplo, você pode usar sinais:

#!/bin/sh

export x=true
start() {
trap x=false USR1
while [ $x = "true" ]; do
    echo running...
    sleep 1
done
}

start &
sleep 5
kill -USR1 $!
wait

produz esta saída:

$ ./testit.sh
running...
running...
running...
running...
running...
$
    
por 05.01.2015 / 16:31
0

Se você estiver usando ksh93 , poderá usar funções de disciplina para implementar variáveis compartilhadas (consulte link )

Como alternativa, você pode usar fish , que implementa esse recurso por meio de um daemon: fishd .

    
por 05.01.2015 / 16:37