Können Sie erklären, warum Ctrl+ Cin meiner bash
Shell den Befehl beeinflusst, der zuvor im Hintergrund ausgeführt wurde mit:
`./my_script.sh 1` &
Der Befehl beendet die Ausführung sofort mit 130
Code:
[1]+ Exit 130 `./my_script.sh 1` &
Das übliche Verhalten von Ctrl+ Cist, den Vordergrundprozess abzubrechen. Und was passiert hier?
Edit 1: (Meine Gedanken) Vielleicht etwas im Zusammenhang mit Backticks - hier beginnt der Child-Subshell-Prozess und er erhält irgendwie Ctrl+, Cwenn der Parent-Prozess ihn empfängt
Bearbeiten 2: Ich fand, dass Ctrl+ Calle Hintergrundprozesse stoppt, die von der aktuellen Shell mit der Verwendung von Backticks ausgeführt wurden.
./my_script.sh 1
&. Oder fragen Sie nach dem letzten Befehl vor Strg-C?`./my_script.sh 1` &
Antworten:
Wenn Sie den Befehl schreiben
Sie führen eine Befehlsersetzung durch (siehe unten).
Praktischerweise führen Sie eine Subshell (die für die Backticks
``
) im Hintergrund (&
) aus, in der Ihr Skript ausgeführt wird (./my_script.sh 1
).Die aktuelle Shell wartet auf das Ende der Ausführung ihrer Subshell, um ihre Ausgabe als Befehle auszuführen.
Die Subshell wartet auf das Ende Ihres Skripts.
Wenn Sie Ctrl + drückenC , unterbrechen Sie dieses Warten und geben das Signal
SIGINT
an das Kind weiter.In diesem Moment versucht , der aktuell Shell als Befehl ausführen , um die Ausgabe bis jetzt erhalten ... und es erzeugt den Fehler ,
130
das heißt , „Script terminierte durch Strg-C“ [ 2 ] .Sowohl mit den Backticks
``
als auch mit$()
in bash führen Sie eine Befehlsersetzung durch [ 1 ] :zum Beispiel
Beachten Sie, dass bei Ausführung im Hintergrund mehr Befehle dieser Art verwendet werden
Es ist immer die aktuelle Shell, die auf alle untergeordneten Ausgaben wartet. Ein einzelnes Ctrl+ Cbeendet das Warten auf alle zusammen.
Wenn Sie stattdessen das Ende des Skripts abwarten, versucht die aktuelle Shell, ihre Ausgabe auszuführen, sobald sie fertig ist.
quelle
SIGINT
an das Kind" das Standardverhalten vonbash
? Oder nur bei Verwendung der Befehlsersetzung?sleep 10; echo ok
als Skript ...&
... ctrl c ... genießen Sie Ihre Zeit!