シェルで作成されたプロセスがあります。バックグラウンドプロセスとして実行され、データベースを.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
答え2
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