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系统进行实验。
答案 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,并在收盘后立即停止。