Andockfenster reagiert nicht auf STRG+C im terminal
Habe ein Problem mit Docker im moment, ich benutze es zu laufen, ein Bild, startet ein ipython notebook auf Start. Ich bin auf der Suche, um einige änderungen zu ipython notebook selbst, so brauche ich, um es zu schließen nach dem Start.
Jedoch, STRG+C im terminal einfach die Eingänge "^C" als string. Es scheint keine wirkliche Möglichkeit, mit STRG+C schließen den ipython notebook-Instanz.
Hätte irgendjemand eine Idee, was das verursachen kann, oder kennt Lösungen dafür?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dieser Beitrag schlägt vor, CTRL-Z als einen workaround für die Zusendung der Prozess in den hintergrund und dann die Tötung der Prozess durch seine Prozess-id:
Nicht töten können Python-Skript mit Strg-C
Mögliche Probleme:
Das Programm fängt Strg-c und nichts tut, sehr unwahrscheinlich.
Gibt es hintergrund-Prozesse, die nicht richtig verwaltet werden. Nur der Hauptprozess, der das signal empfängt und sub-Prozesse hängen. Sehr wahrscheinlich, was passiert.
Vorgeschlagene Lösung:
Überprüfen Sie die Programme, die Dokumentation auf, wie es richtig gestartet und gestoppt werden. Strg-c scheint nicht der richtige Weg.
Wickeln Sie das Programm mit einem docker-entrypoint.sh bash-Skript, das blockiert die container-Prozess und ist in der Lage zu fangen, Strg-c. Dieses bash-Beispiel sollte helfen: https://rimuhosting.com/knowledgebase/linux/misc/trapping-ctrl-c-in-bash
Nach dem Fang Strg-c aufrufen, die ein ordnungsgemäßes Herunterfahren-Methode für ipython notebook.
Das problem ist, dass Ctrl-C ein signal sendet, um die top-level-Prozess innerhalb des Containers, aber dieser Prozess nicht unbedingt zu reagieren, wie man es erwarten würde. Die top-level-Prozess hat die ID 1 im inneren des Behälters, was bedeutet, dass es nicht die Standard-signal-Handler-Prozesse in der Regel haben. Wenn die top-level-Prozess ist eine shell, dann kann es das signal erhalten durch eigene handler, aber nicht weiterleiten, bis der Befehl ausgeführt wird, innerhalb der shell. Details erklärt werden hier. In beiden Fällen werden die docker-container wirkt, als ob es ignoriert einfach Strg-C.
Wenn Sie den Aufbau Ihrer eigenen Bilder, die Lösung ist, um einen minimalen init-Prozess, wie tini oder dumm-init, die als top-level-Prozess im container.
Wahrscheinlich den container Bild, das Sie verwenden, ist keine Bearbeitung der Signale richtig.
Wenn Sie erstellen, die das Bild dann ändern, wie es Roland Webers' Antwort vorschlägt.
Ansonsten versuchen Sie es mit
--init
.Diese behebt Strg+C für mich.
Quelle: https://docs.docker.com/v17.09/engine/reference/run/#specify-an-init-process
@maybeg die Antwort bereits erklärt sehr gut, warum dies geschehen könnte.
Bezüglich absetzen der container nicht mehr reagiert, eine andere Lösung ist es, einfach einen
docker stop <container-id>
in einem anderen terminal. Im Gegensatz zu STRG-C,docker stop
nicht sendet ein SIGINT aber ein SIGTERM-signal, auf das der Prozess möglicherweise anders reagieren.Wenn das fehlschlägt, verwenden Sie
docker kill <container-id>
was sendet ein SIGKILL sofort.Vom dieser Beitrag auf der Docker-message-boards:
Öffnen Sie eine neue shell und führen Sie
Dies funktionierte gut für mich. STRG-Z, STRG-\, etc. kam nur als Saiten, sondern diese getötet, der Docker-container und kehrte die Registerkarte terminal-Eingang.