¿Cambiar variables en un proceso bifurcado desde fuera de esa bifurcación?

¿Cambiar variables en un proceso bifurcado desde fuera de esa bifurcación?

En teoría, con este bloque, solo deberías ver "ejecutando..." una vez (o menos), pero en la práctica, se repite hasta que se elimina manualmente. ¿Cómo cambio el valor de x dentro del proceso bifurcado a falso desde fuera del proceso bifurcado después de que se haya llamado a la función "inicio"?

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

start &
x=false

Respuesta1

La solución simple aquí es utilizar algún tipo de comunicación entre procesos para indicarle al proceso objetivo que realice el cambio. Por ejemplo, podrías utilizar señales:

#!/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

produce esta salida:

$ ./testit.sh
running...
running...
running...
running...
running...
$

Respuesta2

Si está utilizando ksh93, puede utilizar funciones de disciplina para implementar variables compartidas (consultehttps://stackoverflow.com/questions/13726293/environment-variables-to-be-used-across-multiple-korn-ksh93-shell-scripts-get)

Alternativamente, puedes usar fishwhich implementa esta característica a través de un demonio:pescado.

información relacionada