GNU/Linux >> Tutoriels Linux >  >> Linux

Mon processus a été tué mais je ne comprends pas l'avis du noyau

SAK dans ce cas signifie vraiment Secure Attention Key . Le message que vous voyez est un message du noyau défini dans drivers/tty/tty_io.c. SAK est une combinaison de touches qui garantit une connexion sécurisée pour un utilisateur sur la console. Sous Linux, SAK s'en assure en tuant tous les processus attachés au terminal sur lequel SAK est invoqué. Il est prévu que init redémarrera alors le processus de connexion de confiance comme getty suivi de login ou serveur X avec le gestionnaire d'affichage .

Les PID listés sont bien les PID des threads de votre application CX_SC3 qui ont été tués par SAK.

fd#n opened to the tty signifie que le processus/thread qui a été tué avait le descripteur de fichier n ouvert sur le terminal sur lequel le SAK a été appelé.

Sous Linux, il existe deux façons d'invoquer SAK :

  1. Via la touche magique SysRq - généralement Alt +SysRq +K (terminal virtuel) ou Pause K (console série). Ce n'est pas votre cas car vous avez déjà essayé de désactiver la magie SysRq par echo 0 > /proc/sys/kernel/sysrq et envoyer le Pause K séquence par accident est improbable.

  2. Via une séquence de touches définie (terminal virtuel) ou le signal d'arrêt (console série). La disponibilité de SAK sur une console série est contrôlée par setserial .

Le signal d'interruption sur une ligne série est l'envoi continu de valeurs d'espacement pendant un temps supérieur au temps d'envoi du caractère (y compris les bits de démarrage, d'arrêt et de parité). Dans votre cas, il est fort probable que la condition du signal Break apparaisse lors de l'arrêt de votre machine hôte. Veuillez essayer de désactiver le SAK sur votre port série sur l'appareil cible par setserial :

setserial /dev/ttyS0 ^sak

Vous pouvez vérifier l'état de la fonctionnalité SAK sur le port série par setserial -g /dev/ttyS0 . Lorsqu'il est allumé, il affichera SAK après Flags: . Pour le réglage automatique de l'option après le démarrage, voir les scripts de démarrage qui sur les systèmes BusyBox sont généralement /etc/init.d/rcS et /etc/rc.d/S* ou cochez /etc/inittab pour d'autres possibilités.


J'ai réussi à résoudre le problème avec l'aide de la réponse de pabouk. La solution basée sur le code que j'ai finalement découverte qui permet le SAK L'indicateur à définir/désactiver sur le port série lors de l'ouverture à l'aide de l'API de l'espace utilisateur peut être trouvé sur stackoverflow ici Comment puis-je désactiver l'option SAK du port série sous Linux à l'aide de l'API de l'espace utilisateur ?


Linux
  1. Trouver quel processus a été tué par Linux OOM killer

  2. Comment fonctionne copy_from_user du noyau Linux en interne ?

  3. Pourquoi le processus enfant est-il toujours en vie après la suppression du processus parent sous Linux?

  4. Comment démarrer des programmes Linux GUI à partir de la ligne de commande, mais séparément de la ligne de commande ?

  5. Quelle est la différence entre le noyau préemptif non préemptif, préemptif et préemptif sélectif ?

Analyser le noyau Linux avec ftrace

Mon histoire Linux :Apprendre Linux dans les années 90

Quelle est la source actuelle du noyau Linux ?

Comment vérifier HZ dans le terminal?

Impossible de modifier le nombre maximal de fichiers ouverts par processus avec sysctl

Comment Linux conserve-t-il le contrôle du processeur sur une machine monocœur ?