2017-09-04 9 views
0

sshpass mailing list(およびstack overflowも参照)での質問。 HP-UXではSshpassが動作しません。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)マニュアルページから

制御端子は( フォーク中子プロセスによって継承された)(フォーク(2)を参照)。プロセスは、setsid()またはsetpgrp()(setsid(2) およびsetpgrp(2)を参照)、を使用して新しいセッションを作成する場合、または 制御端末に関連するすべてのファイル記述子が閉じられた場合

(強調を付けて)。

私が知る限り、太字の部分はHPUXの特異体であり、Posixや他のUnixプラットフォームの一部ではありません。

問題は、sshpassが関連するttyを開き、プロセスの制御TTYとしてすでに設定されていることを前提としているため、ファイル記述子をすぐに閉じます。

HPUXの固有性のため、これはTTYがプロセスのTTYを制御し、終了後直ちに停止することを意味します。

関連する問題