Am Mittwoch, 11. Dezember 2019 20:50:01 UTC+1 schrieb Celal Dikici:
...
> Das ist nicht der einzige Script, der mit Co-Prozessen arbeitet. Daher ist es mir wichtig zu verstehen, warum das ksh-Script unter Linux nicht das gleiche Verhalten zeigt, wie auf Solaris (bzw. ksh88 vs ksh93).
>
> Es ist OK, wenn sie unterschiedliches Verhalten zeigen; ich möchte es jedoch anhand des obigen Beispiels verstehen.
hat jemand einen Tipp. Auf meinem Mac mit
Celals-iMac:Development Celal$ ksh --version
version sh (AT&T Research) 93u+ 2012-08-01
bekomme ich die gleiche Fehlermeldung.
Ist es evtl. eine Idee, das mit Named Pipes zu realisieren? Ich probiere das aktuell, bin jedoch noch nicht weitergekommen.
hier ist ein komplettes Shellscript Beispiel, das man nehmen und verändern kann. Sie läuft unter Solaris 10
BlindesHuhn.sh
#!/bin/ksh
# XXX
# XXX Version: 20160927
# XXX
function admin_subprocs
{
integer num
while read num; do
(($num)) && echo $num || break
done
}
typeset -r MYNAME="$(basename $0 .sh)"
integer DURCHLAEUFE=${DURCHLAEUFE:-10}
echo "$MYNAME: ANFANG."
echo "$MYNAME: $DURCHLAEUFE Durchläufe"
integer -r parallel=${1:-3}
integer count=0 num
function do_parallel {
integer mynum=$1
echo -e "$mynum\c"
(yes | head -$(($RANDOM)) | wc -c >/dev/null) && print -p $mynum &
return 0
}
echo "$MYNAME: $parallel Unterprozesse"
# Co-Prozess zur Verwaltung der Paralleljobs starten
admin_subprocs |&
# ILLimitTypes auslesen und parallel verarbeiten
while (($DURCHLAEUFE)); do
if (($count < $parallel)); then
num=$((count += 1))
else
if ! read -p num; then # freie Prozessnummer aus Co-Prozess lesen
echo -e "\n$MYNAME: Das Huhn ist tot!"
exit 1
fi
fi
do_parallel $num # Funktion aufrufen
((DURCHLAEUFE -= 1))
done
# Auf Unterprozesse warten, indem der Co-Prozess ausgelesen wird
while (($count > 0)); do
read -p num
((count -= 1))
done
print -p 0 # Terminierung an Co-Prozess schicken
echo "$MYNAME: ENDE."
exit 0