2 votes

Script Bash qui arrête une redirection de sortie après un certain temps

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 ?

1voto

that other guy Points 26297

Gardez à l'esprit que chaque processus bash engendré partagera la grande majorité de sa mémoire avec le processus parent, donc cela n'augmente pas l'utilisation de la mémoire de façon exponentielle comme top pourrait le laisser croire.

Si vous voulez toujours essayer d'optimiser, timeout 5 tee /tmp/mypipe <<< "1" > /dev/null engendrera un processus timeout et un processus tee à la place.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X