GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Docker reagiert nicht auf STRG+C im Terminal

Höchstwahrscheinlich verarbeitet das von Ihnen verwendete Container-Image Prozesssignale nicht richtig. Wenn Sie das Image erstellen, ändern Sie es wie in der Antwort von Roland Webers vorgeschlagen. Versuchen Sie andernfalls, es mit --init auszuführen .

docker run -it --init ....

Dies behebt Strg+C für mich.Quelle:https://docs.docker.com/v17.09/engine/reference/run/#specify-an-init-process


Dieser Beitrag schlägt STRG-Z als Workaround vor, um den Prozess in den Hintergrund zu schicken und den Prozess dann anhand seiner Prozess-ID zu beenden:Python-Skript kann nicht mit Strg-C beendet werden

Mögliche Probleme:

  • Das Programm fängt Strg-C ab und tut nichts, sehr unwahrscheinlich.

  • Es gibt Hintergrundprozesse, die nicht korrekt verwaltet werden. Nur der Hauptprozess empfängt das Signal und Unterprozesse hängen. Sehr wahrscheinlich, was passiert.

Vorgeschlagene Lösung:

  • Sehen Sie in der Programmdokumentation nach, wie es richtig gestartet und gestoppt wird. ctrl-c scheint nicht der richtige Weg zu sein.

  • Umschließen Sie das Programm mit einem Bash-Skript docker-entrypoint.sh, das den Containerprozess blockiert und Strg-c abfangen kann. Dieses Bash-Beispiel sollte helfen:https://rimuhosting.com/knowledgebase/linux/misc/trapping-ctrl-c-in-bash

  • Rufen Sie nach dem Fangen von Strg-C die richtige Shutdown-Methode für das Ipython-Notebook auf.


Das Problem ist, dass Strg-C ein Signal an den Prozess der obersten Ebene innerhalb des Containers sendet, aber dieser Prozess nicht unbedingt so reagiert, wie Sie es erwarten würden. Der Prozess der obersten Ebene hat die ID 1 innerhalb des Containers, was bedeutet, dass er nicht die standardmäßigen Signalhandler erhält, die Prozesse normalerweise haben. Wenn der Prozess der obersten Ebene eine Shell ist, kann er das Signal über seinen eigenen Handler empfangen, leitet es aber nicht an den Befehl weiter, der innerhalb der Shell ausgeführt wird. Details werden hier erklärt. In beiden Fällen verhält sich der Docker-Container so, als würde er Strg-C einfach ignorieren.

Wenn Sie Ihre eigenen Images erstellen, besteht die Lösung darin, einen minimalen Init-Prozess wie tini oder dumb-init als obersten Prozess innerhalb des Containers auszuführen.


Linux
  1. Linux – Wann sollte ich keinen -9 A-Prozess beenden?

  2. Terminal:Termcapinfo-Befehl nicht gefunden?

  3. Liste der vom Terminal generierten Signale (z. B. Strg-c -> Sigint)?

  4. Lpr funktioniert nicht – Scheduler antwortet nicht?

  5. Tomcat läuft, aber Port 8080 antwortet nicht

Richten Sie Bonita ein, einen Business Process Management Server.

Gnome-Terminal:Befehl nicht gefunden

Docker-Befehl nicht gefunden

Umgebungsvariable TERM nicht gesetzt

Docker Volume stellt keine Dateien bereit

Wann sollte ich einen Prozess nicht beenden -9?