Ctrl-C不适用于pppd非分离会话


12

我有一个Mini2440 ARM板,并使用放置了一个基本的Debian 6.0系统multistrap

我曾经tmux在的不同窗口中运行过多个进程/etc/rc.local。我使用其串行端口和getty在该端口上运行的inittab条目连接至开发板。我picocom用作串行通讯器。

当root登录时,~/.bashrc将他附加到已经在运行的tmux服务器上,可以轻松地监视进程。实际的命令是exec tmux attach-session -t "main"。tmux使用默认配置运行。

一切正常,除了其中一个进程(周围的shell脚本pppd)没有Ctrlc从终端接收而其他进程可以接收。也Ctrl\可以。kill -INT <pppd_pid>可以,但kill -INT <shellscript_pid>不能。

我真的需要Ctrlc工作 此设置有什么问题?

编辑:这是stty -a外壳程序脚本中的输出,就在之前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

因为只有pppd这个问题才会发生,所以我认为这与它或它的配置有关,但是当我pppd在tmux之外运行时,Ctrl-C可以工作。pppd使用nodetachoption 运行,因此它保持在终端前台。

我还在我的开发机器(amd64上的Debian 6.0)上对其进行了测试,结果相同。


6
stty -a显示intr = ^C?如果没有,intr设置是什么?(注意:stty -a | grep intr这不起作用,因为它使stty写入管道而不是您的tty。)Ctrl-V Ctrl-C是否回显^C?如果没有,它会产生什么回响?
基思·汤普森

@KeithThompson Ctrl-V打印a,^而Ctrl-C添加a C
扎德

7
这似乎太明显了,但是trapshell脚本中有命令吗?
基思·汤普森

1
pppd它的底层shell决定如何处理直接SIGINT方面没有任何发言权。尝试编写一个微小的Shell脚本,该脚本调用/ bin / sleep 600并向Shell进程发送SIGINT,您将看到完全一样的东西。
安德鲁B

2
我不太了解tmux,但我怀疑pppd会检测到尽管在tmux下运行它也没有终端,然后忽略INT信号。pppd在启动时以及tmux首次被“释放”时的痕迹可能会告诉您。
约翰

Answers:



0

原来,这是pppd发行版中使用的特定版本的错误。我检查过,以前的版本和更高版本pppd都没有此问题。此外,问题并不特定于此拱门和平台或平台tmux。如果pppd在外壳程序脚本中运行,则它不处理Ctrl-C,而在外壳程序之外,则没有问题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.