Liebe Ubuntu user,
meine Problemstellung ist recht einfach: Ich habe eine variable Anzahl X Prozessen (0-100), die eine Datei datei1.1 zu datei1.2 verarbeiten. Ein anschließender Prozess soll danach datei1.2 zu datei1.3 weiterverarbeiten.
Das soll parallel mit
datei1.1 datei2.1 datei3.1 usw. erfolgen
#!/bin/sh doSomeActionOn="/path/to/program" doSomeFurtherActionOn="/path/to/furtherProgram" for file in datei*.1 do # dieser prozess hat datei*.2 zum ergebnis doSomeActionOn $file & done wait for file in datei*.2 do # dieser prozess hat datei*.3 zum ergebnis doSomeFurtherActionOn $file & done
Bei diesem Code habe ich nun das Problem, dass ja immer gewartet wird, bis ALLE ersten Prozesse (dateiX.1->dateiX.2) fertig sind. Das möchte ich nun aber nicht abwarten, sondern sobald doSomeActionOn datei1.1 fertig ist, soll sofort doSomeFurtherActionOn datei1.2 starten, ohne, dass auf alle anderen Prozesse von doSomeActionOn gewartet wird.
Also prinzipiell wäre ich für jeden Tipp dankbar, wie ich das regeln könnte.
Meine eigene Idee ist die, dass ich mir die PID jedes Prozesse hole und mit wait <PID> dann ja Zugriff bekomme. Mein Problem dabei ist nun aber, dass alle im Hintergrund gestarteten Prozesse gleich heissen ('doSomeActionOn'), und ich nicht weiß, wie ich die Prozesse, die datei1.1 oder datei2.1 verarbeiten, unterscheiden kann. Wenn mir da jemand einen Tipp geben kann? Konkret: Gibt es soetwas wie
PID myPID=null myPID=doSomeActionOn $file & wait myPID
? Oder gibts doch ne Möglichkeit die PIDs der Prozesse schon direkt beim schicken in den Hintergrund zu sichern?
Wahrscheinlich ist das ne ganz einfache Frage, hoffe, dass mir jemand helfen kann.
Danke und viele Grüße, Raffael