如何判断进程何时完成文件写入?


9

我有一个从外壳生成的进程。它正在作为后台进程运行,并在中将数据库导出到CSV文件/tmp

我如何知道后台进程何时完成(完成/退出)或CSV文件锁是否已关闭?我计划在文件写入后通过FTP将其传输到另一个主机,但是在开始文件传输之前,我需要完整的文件。


使该过程以某种方式通知您...
轻轨竞赛(于

Answers:


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内置的Shell来完成此操作。

wait内建简单地使shell暂停等待后台作业来完成。您可以为它传递要等待的特定作业,也可以让它等待所有作业。

例如:

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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.