奇怪的行为ssh->;bash-->;(tty无回声)-->;c程序

奇怪的行为ssh->;bash-->;(tty无回声)-->;c程序,bash,select,ssh,file-descriptor,strace,Bash,Select,Ssh,File Descriptor,Strace,我会尽量说清楚的(很抱歉给您带来不便) 在工作中,我们有一个旧的C程序,它与霍尼韦尔的工业手持终端一起工作 该终端有自己的ssh客户端,可以连接到linux redhat 6.6服务器。 一旦它连接到linux机器(使用某个用户),BashShell将使用以下参数启动一个C程序 export TERM=vt200 stty raw icrnl -echo $APLI_EXEC/program param1 param2 因此,流程类似于=>客户端ssh-->ssh服务器->bash-->c程序

我会尽量说清楚的(很抱歉给您带来不便)

在工作中,我们有一个旧的C程序,它与霍尼韦尔的工业手持终端一起工作

该终端有自己的ssh客户端,可以连接到linux redhat 6.6服务器。 一旦它连接到linux机器(使用某个用户),BashShell将使用以下参数启动一个C程序

export TERM=vt200
stty raw icrnl -echo
$APLI_EXEC/program param1 param2
因此,流程类似于=>客户端ssh-->ssh服务器->bash-->c程序

应用程序(或看起来)工作正常,但有时(每周1-3-5次)随机终端停止从服务器接收数据,但应用程序从服务器接收输入。这就像在shell中写入Ctrl+S一样

使用strace调试应用程序和ssh进程时,我意识到了一些奇怪的事情:

应用程序strace很好

write(1, "1", 7) = 1
但是ssh进程的策略不好(我想..是的,我看到了ioctl no echo参数,但是…)

在select调用中,我错过了其中的fd#11或fd#13

将此与另一个呼叫进行比较

rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
read(3, "\365\354\354C\10|\336-\4\342\327B0P\275&\213)\367\32\24\333)#\364\355V\3\237\337\33\204"..., 16384) = 52
select(14, [3 9 13], [11], NULL, {900, 0}) = 1 (out [11], left {899, 999997})
rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
write(11, "a", 1)         = 1
ioctl(11, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig -icanon -echo ...}) = 0
select(14, [3 9 13], [], NULL, {900, 0}          <<<
rt_sigprocmask(SIG_块,[CHLD],[8)=0
rt_sigprocmask(SIG_SETMASK,[],NULL,8)=0
读(3),“\365\354\354C\10 |\336-\4\342\327B0P\275&\213)\367\32\24\333)#\364\355V\3\237\337\33\204”…,16384)=52
选择(14,[3913],[11],NULL,{900,0})=1(out[11],左{8999997})
rt_sigprocmask(SIG_块,[CHLD],[8)=0
rt_sigprocmask(SIG_SETMASK,[],NULL,8)=0
写(11,“a”,1)=1
ioctl(11,SNDCTL_TMR_时基或tcget,{B38400 opost isig-icanon-echo…})=0

选择(14、[39]、[13]、NULL、{900,0}这个问题在StackExchange网站或上可能更合适。如果这不是C程序的问题,那么它的行为不太可能是原因。嗨,David,也许你是对的。我会在这些网站上尝试运气。谢谢你的帮助。这个问题在StackExchange网站或上可能更合适。如果不是他的C程序并不总是有问题,那么它的行为不太可能是原因。嗨,大卫,也许你是对的。我会在这些网站上试试运气。谢谢你的帮助。
lr-x------ 1 root     root 64 Feb 15 17:12 9 -> pipe:[383586491]
lr-x------ 1 root     root 64 Feb 15 17:12 8 -> /var/lib/sss/mc/group
lrwx------ 1 root     root 64 Feb 15 17:12 7 -> socket:[383586484]
lrwx------ 1 root     root 64 Feb 15 17:12 6 -> socket:[383586478]
lrwx------ 1 root     root 64 Feb 15 17:12 5 -> socket:[383586458]
lrwx------ 1 root     root 64 Feb 15 17:12 4 -> socket:[383586457]
lrwx------ 1 root     root 64 Feb 15 17:12 3 -> socket:[383585929]
lrwx------ 1 root     root 64 Feb 15 17:12 2 -> /dev/null
lrwx------ 1 root     root 64 Feb 15 17:12 14 -> /dev/ptmx
lrwx------ 1 root     root 64 Feb 15 17:12 13 -> /dev/ptmx
lrwx------ 1 root     root 64 Feb 15 17:12 11 -> /dev/ptmx
l-wx------ 1 root     root 64 Feb 15 17:12 10 -> pipe:[383586491]
lrwx------ 1 root     root 64 Feb 15 17:12 1 -> /dev/null
lrwx------ 1 root     root 64 Feb 15 17:12 0 -> /dev/null
rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
read(3, "\365\354\354C\10|\336-\4\342\327B0P\275&\213)\367\32\24\333)#\364\355V\3\237\337\33\204"..., 16384) = 52
select(14, [3 9 13], [11], NULL, {900, 0}) = 1 (out [11], left {899, 999997})
rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
write(11, "a", 1)         = 1
ioctl(11, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig -icanon -echo ...}) = 0
select(14, [3 9 13], [], NULL, {900, 0}          <<<