use*_*210 9 process lock files
我有一个从 shell 生成的进程。它作为后台进程运行,并将数据库导出到 .csv 文件中的 CSV 文件/tmp
。
如何判断后台进程何时完成(完成/退出)或 CSV 文件锁是否已关闭?我计划在文件写入后将文件通过 FTP 传输到另一台主机,但在开始文件传输之前我需要完整的文件。
在 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
Run Code Online (Sandbox Code Playgroud)
要检查进程是否打开了文件,您可以使用
lsof <file>
它将列出打开的进程 <file>
ls -l /proc/$(pgrep db-process)/fd
列出进程打开的文件描述符 db-process
您可以使用wait
内置的shell 来完成此操作。
该wait
内建简单地使shell暂停等待后台作业来完成。您可以将特定作业传递给它等待,或者让它等待所有作业。
例如:
echo $(date): starting
sleep 5 &
echo $(date): do something else
wait
echo $(date): background job finished
Run Code Online (Sandbox Code Playgroud)
结果是:
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
Run Code Online (Sandbox Code Playgroud)