2016-11-23 4 views
0

私は、入力ファイルからサーバのリストを1つずつ取り出し、各サーバでいくつかのコマンドを実行するスクリプトを持っています。最初のプロセスの入力に影響を与えずにこのスクリプトが実行されている間に入力ファイルを更新し、2番目のサーバーリストでスクリプトを再実行したいと考えています。これは安全に行うことができますか?プロセスがいつ読み込むファイルを取得するか

+0

私は、あなたが「*プログラムがそれを読んでいる間にファイルに書き込むと、何が起こるのですか?」という質問をしていると思います* * - それは間違いありませんか? – dimo414

+0

はい、私はプロセスがすべてのリソースを取得するとき、ここのファイルからの入力のように知りたいと思っています。 –

+0

入力ファイルへの書き込み、入力ファイルの内容全体の置換 –

答えて

0

あなたはfileに位置file > my_script内容のようなコマンドを実行します(file descriptorとして)my_scriptにパイプされています。これにより、名前から内容が切り離されます。つまり、すぐに別のプロセスでfileを変更/置き換えることができます。これ

あなたの代わりに(など、それを削除し、またはそれへの書き込み)の任意の時点でそのファイルから読み取ることがある、あなたはmy_script名前「ファイル」を渡しているmy_script fileのようなコマンドを実行する場合は、スクリプトが実行されている間に安全にfileを変更することはできません。特にこれはすぐには起こらない。実行中のプロセスでは、すでにファイルを編集してから、かなり遅くまでfileから読み取ることができません。

したがって、stdinから読み込むようにプログラムを設計した場合、入力ファイルを安全に修正して、最初のプロセスがまだ実行中のときにコマンドを再実行することができます。

+0

ありがとうございました.. –

+0

@AravindVijayanうれしいです! – dimo414

0

あなたのプロセスは動作していて、ファイルを変更したい場合は、ファイルをmvして新しい入力ファイルをコピーします。このようにして、プロセスが入力ファイルをメモリに完全に読み込んでいない場合、プロセスは以前のファイルに対して開いているファイル記述子を持ち、影響を受けずに実行されます。もちろん、これはプロセスの実装方法によって異なります。実行中にファイルを再オープンしようとすると、新しいファイルの内容が表示されます。

process inputfile 
mv inputfile inputfile.running 
mv newinput inputfile 
+0

ありがとうございます。ありがとうございました、forループがbashスクリプトでサーバー名を1つずつ読み込むようになっていると思います。入力ファイルからエンティティを削除して新しいサーバー名を指定して同じスクリプト –

関連する問題