GNU/Linux >> Linux Esercitazione >  >> Linux

Il mio processo è stato interrotto ma non riesco a capire l'avviso del kernel

SAK in questo caso significa davvero Secure Attention Key . Il messaggio che stai vedendo è un messaggio del kernel definito in drivers/tty/tty_io.c. SAK è una combinazione di tasti che garantisce un accesso sicuro per un utente sulla console. Su Linux SAK garantisce ciò uccidendo tutti i processi collegati al terminale su cui SAK è invocato. Si prevede che init riavvierà quindi il processo di accesso attendibile come getty seguito da login o server X con gestore display .

I PID elencati sono effettivamente PID di thread della tua applicazione CX_SC3 che sono stati uccisi da SAK.

fd#n opened to the tty significa che il processo/thread che è stato ucciso aveva il descrittore di file n aperto al terminale su cui è stato invocato il SAK.

In Linux ci sono due modi per invocare SAK:

  1. Attraverso il tasto magico SysRq - tipicamente Alt +SysRq +K (terminale virtuale) o Break K (console seriale). Questo non è il tuo caso perché hai già provato a disabilitare il magico SysRq di echo 0 > /proc/sys/kernel/sysrq e inviando il Pausa K la sequenza accidentale è improbabile.

  2. Attraverso una sequenza di tasti definita (terminale virtuale) o il segnale di break (console seriale). La disponibilità di SAK su una console seriale è controllata da setserial .

Il segnale di interruzione su una linea seriale è l'invio continuo di valori di spaziatura per un tempo più lungo del tempo di invio del carattere (inclusi i bit di avvio, arresto e parità). Nel tuo caso è molto probabile che la condizione del segnale Break appaia durante lo spegnimento del computer host. Prova a disattivare il SAK sulla tua porta seriale sul dispositivo di destinazione entro setserial :

setserial /dev/ttyS0 ^sak

Puoi controllare lo stato della funzionalità SAK sulla porta seriale con setserial -g /dev/ttyS0 . Una volta attivato mostrerà SAK dopo Flags: . Per l'impostazione automatica dell'opzione dopo l'avvio vedere gli script di avvio che sui sistemi BusyBox sono solitamente /etc/init.d/rcS e /etc/rc.d/S* oppure seleziona /etc/inittab per altre possibilità.


Sono riuscito a risolvere il problema con l'aiuto della risposta di pabouk. La soluzione basata su codice che ho finalmente scoperto che consente il SAK il flag da impostare/disattivare sulla porta seriale all'apertura utilizzando l'API dello spazio utente può essere trovato su stackoverflow qui Come posso disabilitare l'opzione SAK della porta seriale su Linux utilizzando l'API dello spazio utente?


Linux
  1. Buon compleanno al kernel Linux:qual è la tua versione preferita?

  2. Il ciclo di vita dei test del kernel Linux

  3. Risolvere il problema dell'anno 2038 nel kernel Linux

  4. Il valore massimo dell'ID di processo?

  5. Come funziona internamente copy_from_user dal kernel di Linux?

La mia storia su Linux:Imparare Linux negli anni '90

C'è un modo per cambiare le variabili d'ambiente di un altro processo in Unix?

Trovare quale processo è stato ucciso da Linux OOM killer

Qual è l'attuale sorgente del kernel Linux?

Come controllare HZ nel terminale?

Impossibile modificare il numero massimo di file aperti per processo con sysctl