ファイルAを書き込むプログラムを呼び出すkシェルを実行するJavaスクリプトがあります。その後、同じJavaスクリプトが出力ファイルAを解析します。他のプロセスはファイルAを読み書きしません。
問題は、ファイル A が時間内に解析される準備が常に整っているとは限らないことです。これは、プログラムと呼び出し元のシェルが戻った後でも、ファイル システムがまだジョブを終了しているためだと思います。これは、多数のプロセスが実行されている場合にのみ発生します。
私のシステムでは lsof が動作しないようです。エディターでファイルを開くと、lsof はエディター プロセスを表示しますが、ファイル名を lsof に渡すと、次のようになります: lsof: no file use located: filename
プログラムまたはkシェルから戻る前にロックを解除する必要があるため、ファイルが完全に閉じられていない可能性があるため、fileLockは機能しないと思います。
私の考えでは、ファイルの名前を変更 (mv) し、パーサーに名前を変更したファイルを解析させる短いスクリプトを作成することでした。私の理解では、ファイルは完全に書き込まれるまで名前を変更できないということです。mv コマンドからの stdOut に何かが含まれているかどうかを確認する while ループに mv コマンドを入れました。理論的には、それが空であれば問題ありません。
#! /bin/ksh
# Move a file. The idea is that this script will not return until the mv is
# complete. If mv is successful, mv.out.txt should be empty.
mv $1/camber.out $1/camber.out.copy > mv.out.txt
while [[ -s mv.out.txt ]] ;
do
echo "mv did not happen"
mv $1/camber.out $1/camber.out.rename > mv.out.txt
done
echo "mv should have taken place"
exit
mv が停止された例はまだ見たことがありません。コメント、提案、ヒント、または侮辱は大歓迎です。すべてに前もって感謝します。