Ich bin Debuggen eine Kuriosität mit einem Shell-Skript und fragen, ob ich das falsch verstanden habe, wie Bash „fork“ (&
) arbeitet, vielleicht, weil ich es in der Regel über einen Anschluss in einzelnen Befehlen verwenden, zB:Was passiert, wenn ich `&` mit einer Funktion in einem Bash-Skript verwende?
[~me]$ someExecutable &
nun in einem Shell-Skript:
foo() {
echo "logic"
}
bar() {
echo "idic"
}
baz() {
echo "katra"
}
foo &
bar
baz
Meine Absicht für die Funktion ist foo
asynchron aufgerufen werden, und dann für den Rest des Skripts in dem ursprünglichen Prozesskontext weiterzuführen.
Wenn ich dieses Beispiel Skript ausführen ich erhalten die erwartete Ausgabe tun :
logic
idic
katra
(das heißt, nur einzelne offensichtlich Anrufe bar
und baz
, ich bin überhaupt nicht durch die relative gestört um der drei Zeilen der Ausgabe, die ich kann variieren verstehen)
aber ich sowohl die Ausgabe wird Mißverständnis kann und das Skript selbst. Wenn dem so wäre, würde das sicherlich die Kuriosität erklären, die ich in meinem echten Code sehe, und mich davor bewahren, weiter zu graben.
Ist es möglich, dass das gabelförmige Shell-Skript im untergeordneten Prozess nach dem Aufruf von foo
fortgesetzt wird? Bedeutet, dass der Rest meines Shell-Skripts zweimal ausgeführt wird?
Was passiert wirklich, wenn ich &
so in einem Bash-Skript verwende?
Danke - das war es, was ich suchte! –
+1 für die Adressierung des Problems. Quibble: foo() läuft in einer (asynchronen) * Subshell *, was ein separater * Prozess * ist. – mklement0