sshを使ってサーバーとの接続を呼び出すC++アプリケーションがあります。私は時々sshのセッションは、サーバーが終了した召喚のコマンドが終了した後、長い間横たわっていることがわかりました。sshセッションが時々終了しない理由を理解するには?
The session terminates when the command or shell on the remote machine
exits and all X11 and TCP/IP connections have been closed. The exit
status of the remote program is returned as the exit status of ssh.
は、私は、コマンドが終了したことがわかり、私はすべてのX11やTCP/IP接続がクローズされていないと想像します。ssh用Centos4のmanページを見て私は、以下を参照してください。どうすればこれらのsshが待っているのか知ることができます。私の召喚コマンドのC++アプリケーションを修正して、残っているものをクリーンアップしてsshを開いたままにしておくことができます。
なぜこの失敗は時間の一部だけで、すべての呼び出しでは発生しないのだろうか?それは時間の約50%が発生するようです。私のC++アプリケーションはこれを引き起こすために何を残すことができますか?
その他の背景:サーバーはデーモンで、起動するとフォークと親が終了し、子を実行したままになります。使用してクライアントの召喚状:
popen("ssh -n -o ConnectTimeout=300 [email protected] \"sererApp argsHere\""
" 2>&1 < /dev/null", "r")
今のところ、fork()の子でfclose(stderr)を実行して終了し、sshはもう孤立していません。 – WilliamKF