GNU/Linux >> Linux Esercitazione >  >> Linux

Docker non risponde a CTRL+C nel terminale

Molto probabilmente l'immagine del contenitore che usi non gestisce correttamente i segnali di processo. Se stai creando l'immagine, cambiala come suggerisce la risposta di Roland Webers. Altrimenti prova a eseguirla con --init .

docker run -it --init ....

Questo risolve Ctrl+C per me. Fonte:https://docs.docker.com/v17.09/engine/reference/run/#specify-an-init-process


Questo post propone CTRL-Z come soluzione alternativa per inviare il processo in background e quindi terminare il processo tramite il suo ID processo:Cannot kill script Python with Ctrl-C

Possibili problemi:

  • Il programma rileva ctrl-c e non fa nulla, molto improbabile.

  • Ci sono processi in background che non sono gestiti correttamente. Solo il processo principale riceve il segnale e i processi secondari si bloccano. Molto probabile cosa sta succedendo.

Soluzione proposta:

  • Controlla la documentazione dei programmi su come è correttamente avviato e arrestato. ctrl-c sembra non essere il modo corretto.

  • Avvolgi il programma con uno script bash docker-entrypoint.sh che blocca il processo del contenitore ed è in grado di catturare ctrl-c. Questo esempio bash dovrebbe aiutare:https://rimuhosting.com/knowledgebase/linux/misc/trapping-ctrl-c-in-bash

  • Dopo aver rilevato ctrl-c, invoca il metodo di arresto appropriato per ipython notebook.


Il problema è che Ctrl-C invia un segnale al processo di primo livello all'interno del contenitore, ma quel processo non reagisce necessariamente come ci si aspetterebbe. Il processo di primo livello ha ID 1 all'interno del contenitore, il che significa che non ottiene i gestori di segnali predefiniti che i processi hanno di solito. Se il processo di primo livello è una shell, può ricevere il segnale tramite il proprio gestore, ma non lo inoltra al comando che viene eseguito all'interno della shell. I dettagli sono spiegati qui. In entrambi i casi, il contenitore docker si comporta come se ignorasse semplicemente Ctrl-C.

Se stai creando le tue immagini, la soluzione è eseguire un processo init minimo, come tini o dumb-init, come processo di livello superiore all'interno del contenitore.


Linux
  1. Cosa succede se "uccidi -9" non funziona?

  2. Linux – Quando non dovrei uccidere -9 Un processo?

  3. Terminale:comando Termcapinfo non trovato?

  4. Lpr non funziona – Lo scheduler non risponde?

  5. comando Docker non trovato

Configura Bonita, un server di gestione dei processi aziendali.

Elenco dei segnali generati dal terminale (ad es. Ctrl-c -> Sigint)?

gnome-terminal:comando non trovato

Variabile di ambiente TERM non impostata

Docker non aggiorna le modifiche nella directory

la password di root non funziona per su nel terminale