Alterar variáveis ​​em um processo bifurcado de fora dessa bifurcação?

Alterar variáveis ​​em um processo bifurcado de fora dessa bifurcação?

Em teoria, com este bloco, você deveria ver "running..." apenas uma vez (ou menos), mas na prática, ele se repete até ser eliminado manualmente. Como altero o valor de x dentro do processo bifurcado para falso fora do processo bifurcado após a função "iniciar" ter sido chamada?

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

start &
x=false

Responder1

A solução simples aqui é usar algum tipo de comunicação entre processos para informar ao processo alvo 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...
$

Responder2

Se estiver usando ksh93, você pode usar funções de disciplina para implementar variáveis ​​compartilhadas (vejahttps://stackoverflow.com/questions/13726293/environment-variables-to-be-used-across-multiple-korn-ksh93-shell-scripts-get)

Alternativamente, você pode usar fishwhich implementa esse recurso através de um daemon:pescar.

informação relacionada