Ctrl-C ne fonctionne pas avec la session non détachée pppd

12

J'ai une carte Mini2440 ARM, et j'ai mis un système de base Debian 6.0 dessus en utilisant multistrap.

J'ai utilisé tmuxpour exécuter plusieurs processus dans des fenêtres différentes de /etc/rc.local. Je me connecte à la carte en utilisant son port série et une entrée inittab pour fonctionner gettysur ce port. J'utilise picocomcomme communicateur série.

Lorsque root se connecte, ~/.bashrcle connecte au serveur tmux déjà en cours d'exécution et les processus peuvent être facilement surveillés. la commande réelle est exec tmux attach-session -t "main". tmux fonctionne avec la configuration par défaut.

Tout fonctionne, sauf l'un des processus (un script shell autour pppd) ne reçoit pas Ctrlcdu terminal, contrairement à d'autres processus. Fonctionne également Ctrl\. fonctionne également kill -INT <pppd_pid>, mais kill -INT <shellscript_pid>ne fonctionne pas.

J'ai vraiment besoin Ctrlcde travailler. Quel est le problème avec cette configuration?

Edit: voici la sortie de stty -adans le script shell, juste avant pppd:

speed 38400 baud; rows 23; columns 80; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts
-ignbrk brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff
-iuclc -ixany imaxbel -iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
echoctl echoke

comme c'est juste un pppdprocessus qui a ce problème, je pense que cela a quelque chose à voir avec lui ou sa configuration, mais quand je cours en pppddehors de tmux, Ctrl-C fonctionne. pppdfonctionne avec nodetachoption, il reste donc au premier plan du terminal.

Je l'ai également testé sur ma machine de développement (Debian 6.0 sur amd64) avec les mêmes résultats.

zaadeh
la source
6
Est stty -a- ce que ça se voit intr = ^C? Sinon, quel est le intrréglage? (Remarque: stty -a | grep intrne fonctionnera pas, car il fait sttyécrire sur un tube plutôt que sur votre tty.) Est-ce que Ctrl-V Ctrl-C fait écho ^C? Sinon, à quoi cela fait-il écho?
Keith Thompson
@KeithThompson Ctrl-V imprime un ^et Ctrl-C lui ajoute un C.
zaadeh
7
Cela semble trop évident, mais y a-t-il une trapcommande dans le script shell?
Keith Thompson
1
pppdn'a rien à dire sur ce que son shell sous-jacent décide de faire avec un SIGINT direct. Essayez d'écrire un petit script shell qui invoque / bin / sleep 600 et envoyez au processus shell un SIGINT, vous verrez exactement la même chose.
Andrew B
2
Je ne connais pas assez bien tmux mais je soupçonne que pppd détecte qu'il n'a pas de terminal bien qu'il fonctionne sous tmux et ignore ensuite les signaux INT. une trace de pppd lors de son démarrage, ainsi que lorsque tmux est "Détaché" la première fois, sera probablement révélatrice.
Johan

Réponses:

2

Avez-vous déjà pensé à givin GNU screen? Pour être très honnête, je n'ai pas beaucoup d'expérience avec tmux, mais l'écran a toujours fait le travail correctement.

Alessandro Meyer
la source
L'écran est sexy et fantastique. Un +1 pour vous.
root
0

Il s'est avéré que c'était un bug dans la version particulière pppdqui était utilisée dans la distribution. J'ai vérifié et les versions précédentes et ultérieures de pppdn'ont pas ce problème. De plus, le problème n'est pas spécifique à cet arc et à cette plate-forme ou tmux. Si pppdest exécuté à l'intérieur d'un script shell, il ne gère pas Ctrl-C, tandis qu'à l'extérieur du shell, il n'a aucun problème.

zaadeh
la source