bash while-Schleife threading
habe ich eine while-Schleife Lesen von Zeilen aus einer $hosts
while read line
do
ip=$line
check
done < $hosts
meine Frage ist, kann ich einige Weg, um diese Fahrt, oder führen Sie die Prüfung auf 10 hosts gleichzeitig und jeder check ist auf eine andere IP und beenden Sie, wenn alle IP in $host
überprüft worden?
Dank
Völlig richtig, Bash hat keinen Zugriff auf threading. Einen hintergrund-job führt eine eigene der Prozess nicht in einem thread. Also streng genommen ist das multiprocessing, nicht multithreading.
InformationsquelleAutor radman | 2014-04-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie senden Sie Aufgaben auf dem hintergrund von
&
Wenn Sie beabsichtigen, zu warten, für Sie alle zu beenden, können Sie die
wait
Befehl:Können Sie die
pid
von der gegebenen Aufgabe wurde gestartet im hintergrund, wenn Sie wollen, warten Sie eine (oder einige) bestimmte Aufgaben.Hinweis: die hintergrund-Prozesse können mess up die Ausgabe, wie Sie laufen asynchron. Sie möchten möglicherweise verwenden Sie eine named pipe zum sammeln der Ausgabe von Ihnen.
Bearbeiten
Als fragte in den Kommentaren könnte es erforderlich sein, für die Begrenzung der hintergrund-Prozesse Gabel. In diesem Fall können Sie verfolgen, wie viele Prozesse im hintergrund, die Sie begonnen haben, und mit Ihnen kommunizieren über eine named pipe.
Dies ist nur ein Beispiel, wie Sie mithilfe der hintergrund-Prozesse und wie können Sie warten, für Sie. Wenn Sie möchten, geben Sie die maximale Anzahl von threads, die klingt wie ein thread-pool. Für diese füge ich ein Beispiel, allerdings ist es vielleicht nicht die beste Umsetzung
Wann kommt counter bekommen verringert?
Es wird wieder um eins erniedrigt, jedes mal, wenn es eine Zeile liest. Echo, welche auch den Druck der neuen Linie.
wir haben nie Dekrementieren Zähler: der Zähler wird verwendet, um zu initialisieren, einen "pool" von hintergrund-Prozesse, die in Ihrer Anzahl begrenzt, dann erstellen wir eine neue hintergrund-Prozess, wenn noch nötig, wenn eine zuvor gestartete Prozess im hintergrund beendet
InformationsquelleAutor fejese
Können Sie mehrere Prozesse starten, jeder Aufruf der Funktion
check
und warten, bis Sie auf fertig stellen.Ob dies erhöht die Geschwindigkeit hängt von verfügbaren Prozessoren und die Funktion
check
's Umsetzung. Sie haben zu gewährleisten, gibt es keine Daten in Abhängigkeitcheck
zwischen den Iterationen.InformationsquelleAutor P.P.