Wie stoppe ich ein Bash-Skript über die Befehlszeile?

Wie stoppe ich ein Bash-Skript über die Befehlszeile?

Ich verwende ein Bash-Skript, mit dem ich XCode unter OS X ausführe. Das dauert mehrere Minuten. Ich kann den Tastenbefehl nicht finden, um es zu stoppen, wenn ich einen Fehler feststelle. Unter DOS bin ich an Ctrl+C/ gewöhnt Ctrl+Z, aber beides scheint nicht zu funktionieren. Wonach suche ich (auf dem Standardterminal von OS X)?

Antwort1

Es gibt einige Tastendrücke, die Ihnen hierbei helfen sollten.

Ctrl+ Csollte dem Vordergrundprozess SIGINT senden, und das sollte den Prozess beenden, sofern Sie das Signal nicht mit etwas wie trap INT ...in Ihrem Shell-Code abfangen.

Ctrl+ Zsollte SIGSTOP senden, was Ihren Prozess erneut anhalten würde, sofern Sie Ihre Signale nicht abfangen.

Die Zuordnung von Tastenfolgen erfordert einige Hürden, einschließlich der Terminaleinstellungen. Was sagt stty -aIhr Computer? Suchen Sie in der Ausgabe nach intr, das ist der Tastendruck, der SIGINT auslösen soll. Wenn nichts festgelegt ist, müssen Sie es festlegen, etwa so:stty intr ^C

Wie andere bereits gesagt haben, können Sie den Vorgang auch von einem anderen Fenster aus beenden.

Antwort2

Wenn Ctrl+ Cbei Ihnen nicht funktioniert, können Sie eine neue Registerkarte Terminal öffnen und Folgendes eingeben:

killall [process name]

wobei [process name]der Name Ihres Bash-Skripts ist (Sie finden es im Aktivitätsmonitor von OS X).

Antwort3

Sie können diese Lösungen ausprobieren:

  • Versuchen Sie diese Tastenkombination: Ctrl+ AltGr+8
  • Öffnen Sie ein neues Terminal und führen Sie auspkill -f script_name

Antwort4

Um das zu ergänzen, was andere Benutzer gesagt haben: Sie können auch Ctrl+ verwenden \, was sendet SIGQUITund dasselbe ist wie, SIGINTaußer dass es auch einen Core Dump erzeugt. Ich habe festgestellt, dass Programme, die ignorieren, dies SIGINThäufig nicht tun SIGQUIT.

Basierend aufManpage für KillSIGTERMkönnen Sie auch ein oder an jeden Prozess senden SIGKILL. Sie können dies erreichen, indem Sie Ihren Prozess in der Prozesstabelle suchen (Typ ps) und dann „ kill -15 [pid]to send a“ SIGTERModer kill -9 [pid]„to send a“ eingeben SIGKILL(SIGKILL kann nicht ignoriert werden und beendet den Prozess auf jeden Fall).

Quelle 1UndQuelle 2

verwandte Informationen