プロセスがファイルの書き込みを完了した時点をどうやって知ることができますか?

プロセスがファイルの書き込みを完了した時点をどうやって知ることができますか?

シェルで作成されたプロセスがあります。バックグラウンドプロセスとして実行され、データベースを.csvファイルにエクスポートします/tmp

バックグラウンドプロセスが完了(終了/終了)されているのか、CSVファイルのロックが閉じられているのか、どうすればわかりますか?ファイルの作成後に別のホストにFTPを送信する予定ですが、ファイル転送を開始する前にファイル全体が必要です。

ベストアンサー1

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

おすすめ記事