Moin!
In einem bash-script rufe ich zwei selbst programmierte C-Programme auf. Das eine Programm schreibt in eine Textdatei ("erstes_programm"), das andere liest anschließend aus dieser Datei wieder Daten aus ("zweites_programm"). Ich weiß, dass es andere Möglichkeiten gibt, Kommunikation zwischen Prozessen zu ermöglichen, es geht mir hier aber um das Verständnis eines bestimmten beobachteten Verhaltens, und zwar wie folgt:
Wenn ich den Aufruf der beiden Programme direkt aufeinander folgen lasse, dann kann "zweites_programm" oft (aber nicht immer) den Inhalt der von "erstes_programm" erstellten Datei nicht lesen. Es erkennt 0 Zeilen. Füge ich einen kleinen sleep ein, funktionert es aber wie erwartet:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | range=$(seq 1 18) for i in $range; do cd ${MAIN_DIR} cd erstes_programm ./erstes_programm-R ${i} cd ${MAIN_DIR} cd zweites_programm # fitness des tipps berechnen sleep 0.03 ./zweites_programm RES=$? ERGEBNIS=`expr $RES + $ERGEBNIS` done |
Füge ich das "sleep 0.03" ein, läuft es korrekt. Mit einem "sleep 0.01" funktioniert es beispielsweise nicht.
Meine Fragen:
a) Wieso ist das so?
b) Wie macht man es richtig (sicher nicht mit einem sleep(1) - ich habe schon versucht, ein sync(1) einzufügen, aber das ändert nichts)
Interessierte Grüße
Herakles