Tengo una placa ARM Mini2440, y he puesto un sistema base Debian 6.0 usando multistrap
.
Solía tmux
ejecutar varios procesos en ventanas diferentes desde /etc/rc.local
. Me conecto a la placa usando su puerto serie y una entrada inittab para ejecutar getty
en ese puerto. Yo uso picocom
como comunicador en serie.
Cuando root inicia sesión, ~/.bashrc
lo conecta al servidor tmux que ya se está ejecutando, y los procesos se pueden monitorear fácilmente. El comando real es exec tmux attach-session -t "main"
. tmux se ejecuta con la configuración predeterminada.
Todo funciona, excepto que uno de los procesos (un script de shell pppd
) no recibe Ctrlcdel terminal, mientras que otros procesos sí. También Ctrl\funciona También kill -INT <pppd_pid>
funciona, pero kill -INT <shellscript_pid>
no funciona.
Realmente necesito Ctrlctrabajar. ¿Qué hay de malo en esta configuración?
Editar: aquí está la salida de stty -a
en el script de shell, justo antes 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
Dado que es solo el pppd
proceso el que tiene este problema, creo que tiene algo que ver con él o su configuración, pero cuando ejecuto pppd
fuera de tmux, Ctrl-C funciona. pppd
se ejecuta con nodetach
opción, por lo que permanece en primer plano terminal.
También lo probé en mi máquina de desarrollo (Debian 6.0 en amd64) con los mismos resultados.
^
y Ctrl-C le agrega una C
.
trap
comando en el script de shell?
pppd
no tiene voz en lo que su shell subyacente decide hacer con un SIGINT directo. Intente escribir un pequeño script de shell que invoque / bin / sleep 600 y envíe al proceso de shell un SIGINT, verá exactamente lo mismo.
stty -a
mostrarintr = ^C
? Si no, ¿cuál es laintr
configuración? (Nota:stty -a | grep intr
no funcionará, ya que hace questty
escribir en una tubería en lugar de en su tty.) ¿Ctrl-V Ctrl-C hace eco^C
? Si no, ¿a qué se hace eco?