1

私は Fortran プログラム (ここでは program.exe と呼びましょう) を作成し、いくつかのシミュレーションを行いました。sshを介して、遠く離れたコンピューターにログインして、そこで実行を開始し、数日後に結果を収集しています。プログラムがどのように進行するかを最新のものにするために、シェル出力をテキストファイル output.txt にも書き込みたいと思います (常に遠く離れたコンピューターにログインすることはできないため)。コマンドは次のようになります

nohup program.exe | tee output.txt > /dev/null &

これにより、プログラムがまだ実行を終了していなくても、output.txt を見て現在のステータスを確認できます。上記のコマンドは、ローカル マシンで正常に動作します。最初にコマンド '>' を試してみましたが、ここでの問題は、プログラム全体が終了するまでテキスト ファイルに何も書き込まれないことでした (おそらくパイプ バッファに関連していますか?)。そこで、「tee」で回避策を使用しました。

問題は、ssh (ssh -X user@machine) 経由でコンピューターにログインし、上記のコマンドを実行して VI エディターで output.txt を確認すると、プログラムが終了するまで何も表示されないことです。「nohup」と「&」を省略すると、終了するまでシェル出力すら得られません。私の考えでは、ssh によってバッファリングされているデータで何かをしなければならないかもしれないということでしたが、私はむしろ Linux の初心者です。アイデアや回避策については、とても感謝しています!

4

1 に答える 1

1

screenユーティリティhttp://www.oreillynet.com/linux/cmd/cmd.csp?path=s/screenの代わりに使用しますnohup。したがって、プログラムを切り離された状態 (^A^D) に設定し、ホストに再接続し、画面セッションを取得し (screen -r)、ログアウトしていないかのように出力を監視できます。

于 2012-08-20T16:07:26.180 に答える