Je suis à la recherche d'une solution légère pour arrêter une commande avec une redirection de sortie si elle reste bloquée. Ma solution actuelle
if [[ -w /tmp/mypipe ]]; then
timeout --kill-after 10 5 echo "1" > /tmp/mypipe
fi
ne fonctionne que si la partie gauche de la commande ne fonctionne pas correctement (par exemple, personne ne lit dans le tuyau). Mais j'ai découvert une situation où la redirection reste bloquée -- ce qui est au moins un problème de tâches non complètement synchronisées, que je ne peux pas résoudre maintenant.
Il y a plusieurs questions connexes comme celle-ci, celle-là ou celle-là. La dernière couvre principalement ma question, mais je cherche toujours une solution plus légère. Elle suggère de travailler comme
( CMDPID=$BASHPID; \
(sleep 5; kill -9 $CMDPID >& /dev/null) & echo "1" > /tmp/mypipe )
Mais cela engendre deux nouveaux processus bash. Y a-t-il une solution plus légère à ce problème ?