2016-08-13 5 views
1

I unten Logik bin mit einem SQL parallelParallel Aufruf von SQL-Skript von Shell

PID_LIST="start" while [ "$PID_LIST" ] do

$count =0 
if [ "z$PID_LIST" = "zstart" ] 
then 
PID_LIST="" 
fi 

for PID in $PID_LIST 
do 
    # echo "Checkpid $PID" 
    if kill -0 $PID >/dev/null 2>&1 
    then 
    PID_LIST_TMP="$PID_LIST_TMP $PID" 
    $count =`expr $count + 1` 
    fi 
done 
PID_LIST=$PID_LIST_TMP 

if [ $more_re_to_process -eq "Y" ] 
then 
while [ $count -le $MAX_INSTANCE ] 
do 

    #prepare input for sql 

    invoke SQL script sql1 with prepared one >LOG_$count 
    PID_LIST = PID_LIST="$PID_LIST $!" 

done 
fi; done 

In diesem Beispiel auszuführen, wenn jeder SQL-Prozess beendet ich einen neuen zu schaffen. Aber das Problem ist, dass ich am Ende ein neues Protokoll erstellen. Ich will, dass jedes Mal, wenn ich eine neue SQL-Sitzung erstellen, es die LOG-Datei des Prozesses verwendet, der (falls vorhanden) abgeschlossen ist.

Könnte jemand sagen Wie kann ich das tun?

Antwort

1

Vorausgesetzt, dass die Shell Arrays behandelt, können Sie die PIDs als Elemente in einem Array speichern und nur das Element löschen, wenn ein Prozess abgeschlossen ist, sodass die Indizes der anderen Prozesse gleich bleiben. dann in einer Schleife zum Aufrufen neuer Prozesse nach gelöschten Elementen suchen; mit dem Array-Index $count, >LOG_$countverwendet die LOG-Datei des Prozesses, der abgeschlossen ist.