如何让HPUX采用TTY作为控制

时间:2017-09-04 09:34:06

标签: tty hp-ux pty sshpass

sshpass上发出的问题mailing list(以及stack overflow)。 Sshpass不适用于HP-UX。

观察桁架输出,我看到以下内容:

-u [/tmp/sshpass][14066]{3783827} fork() ................... (returning as child ...) ......... = 14064 {3783821}

子进程是14066。

-u [/tmp/sshpass][14066]{3783827} setpgrp3(2)................................................. [entry]
-u [/tmp/sshpass][14066]{3783827} setpgrp3(2)................................................. = 14066

开始新会话,断开与之前的TTY

的连接
-u [/tmp/sshpass][14066]{3783827} open(0x400132d0, O_RDWR, 01210)............................. [entry]
-u [/tmp/sshpass][14066]{3783827} open("/dev/pts/5", O_RDWR, 01210)........................... = 6

使用标志O_RDWR打开/ dev / pts / 5。根据Posix的说法,此时此刻 pts / 5应该成为新的控制终端 处理。显然,这不会发生。

打开的HP-UX手册页建议打开/ dev / pts / 5应该使该进程将其作为新的控制TTY使用它。我不知道为什么不会发生这种情况,也无法访问HP-UX系统进行实验。

1 个答案:

答案 0 :(得分:0)

那个系统实际上必须得到HP的支持才能得到答案,但既然我们现在有了答案,我会在这里发布。

来自HPUX termios(7)手册页:

  

控制终端在a期间由子进程继承   fork()(参见fork(2))。一个过程放弃了它的控制终端   如果它使用setsid()或setpgrp()创建一个新会话(请参阅setsid(2)   和setpgrp(2)),或当所有文件描述符关联时   控制终端已关闭

(强调补充)。

据我所知,粗体部分是HPUX特性,不属于Posix,也不属于其他Unix平台。

问题是sshpass打开相关的tty,并立即关闭文件描述符,因为它假定它已被设置为进程的控制TTY。

由于HPUX特性,这意味着TTY成为过程'控制TTY,并在收盘后立即停止。