Une façon est d'exécuter le programme dans un shell interne est exécuté, et communiquer avec le shell interne est exécuté par l'intermédiaire d'un canal nommé avec l' read
commande. De cette façon, vous pouvez vérifier le statut de sortie du processus en cours d'exécution et de communiquer ce retour dans le tuyau.
Voici un exemple de calendrier les yes
commande au bout de 3 secondes. Il obtient le PID du processus à l'aide d' pgrep
(éventuellement ne fonctionne que sur Linux). Il y a également un problème avec l'aide d'un tuyau dans un processus d'ouverture d'un tuyau pour la lecture de bloquer jusqu'à ce qu'il est également ouvert pour l'écriture, et vice versa. Pour empêcher l' read
commande accroché, j'ai "calé" ouvrir le tuyau pour les lire avec un fond shell interne est exécuté. (Une autre façon d'éviter un gel pour ouvrir le canal de lecture-écriture, c'est à dire read -t 5 <>finished.pipe
- cependant, qui peuvent également ne pas fonctionner, sauf avec Linux.)
rm -f finished.pipe
mkfifo finished.pipe
{ yes >/dev/null; echo finished >finished.pipe ; } &
SUBSHELL=$!
# Get command PID
while : ; do
PID=$( pgrep -P $SUBSHELL yes )
test "$PID" = "" || break
sleep 1
done
# Open pipe for writing
{ exec 4>finished.pipe ; while : ; do sleep 1000; done } &
read -t 3 FINISHED <finished.pipe
if [ "$FINISHED" = finished ] ; then
echo 'Subprocess finished'
else
echo 'Subprocess timed out'
kill $PID
fi
rm finished.pipe