2017-09-04 47 views
0

在sshpass mailing list(以及stack overflow)上出現的問題。 Sshpass在HP-UX上不起作用。如何讓HPUX採用TTY作爲控制

望着桁架輸出,我看到以下內容:

-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應該成爲新的 過程的控制終端。顯然,這不會發生。

open的HP-UX手冊頁顯示打開/ dev/pts/5應該使該進程將其作爲其新的控制TTY。我不知道爲什麼這種情況不會發生,也無法訪問HP-UX系統進行實驗。

回答

0

其系統實際上已經被HP支持獲得答案的人,但由於我們現在有了答案,我會在此處發佈。

從HPUX termios(7)手冊頁:

控制終端通過子進程一個 fork()的過程中繼承(見叉(2))。如果使用setsid()或setpgrp()(請參閱setsid(2) 和setpgrp(2)),或者與 控制終端關聯的所有文件描述符都已關閉,則進程放棄其控制終端

(強調添加)。

據我所知,粗體部分是HPUX特質,並不屬於Posix或其他Unix平臺的一部分。

問題是,sshpass打開相關的tty,並立即關閉文件描述符,因爲它假定它已被設置爲進程的控制TTY。

由於HPUX的特殊性,這意味着TTY成爲過程'控制TTY,並在關閉後立即停止。