プロセスがファイルへの書き込みを終了したことを確認するにはどうすればよいですか?


9

シェルから生成されたプロセスがあります。これは、バックグラウンド・プロセスとして実行されているとにおけるCSVファイルにDBをエクスポートしています/tmp

バックグラウンドプロセスが完了(終了/終了)したとき、またはCSVファイルロックが閉じたかどうかを確認するにはどうすればよいですか?ファイルが書き込まれたら、別のホストにFTPで転送する予定ですが、ファイル転送を開始する前に完全なファイルが必要です。


プロセスは...何とかご連絡ください
軌道上での明度レース

回答:


7

Linuxでは、プログラムは(Windowsとは異なり)ファイルに書き込んでも、ファイルはロックされません。

プロセスが完了したかどうかを確認するには、次を使用します。

while [[ 1 ]]; do
  pgrep dbprocess &>/dev/null

  if [[ $? -eq 0 ]]; then
    echo still running
  else
    echo finished
    # start ftp transfer
  fi
  sleep 2
done

プロセスがファイルを開いているかどうかを確認するには、次を使用できます

  • lsof <file> 開いたプロセスを一覧表示します <file>

  • ls -l /proc/$(pgrep db-process)/fd プロセスによって開かれているファイル記述子をリストします db-process


7

waitこれを実現するために組み込みのシェルを使用できます。

wait組み込みは、単にシェルは完全にバックグラウンドジョブを待って一時停止する原因となります。待機する特定のジョブを渡すか、すべてのジョブを待機させることができます。

例えば:

echo $(date): starting
sleep 5 &
echo $(date): do something else
wait
echo $(date): background job finished

その結果:

Thu Sep 25 12:06:48 EDT 2014: starting
Thu Sep 25 12:06:48 EDT 2014: do something else
Thu Sep 25 12:06:53 EDT 2014: background job finished
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.