在脚本中,如何确定另一个进程当前是否正在写入文件?

在脚本中,如何确定另一个进程当前是否正在写入文件?

我对 Bash 脚本还很陌生,所以我可能误解了,但这是我目前的情况:

在脚本中,我开始办公室;转换奥德特pdf

看起来办公室将自己与脚本进程分离,然后去做自己的事情。好的,没关系;GUI 应用程序往往会这样做……

但我需要等到新的pdf已经完全写完了,因为我的下一步是处理新的pdf

(据我所知)我无法使用 soffice 的进程 ID,因为它可能在我的脚本启动之前已经是一个正在运行的进程:例如。办公室可能已经为另一个不相关的文档/演示文稿/电子表格打开了正常的 GUI 活动。

对我来说,问题的关键在于,在我继续之前,新pdf必须最终确定...

有没有办法确定文件何时不再以“写入”模式打开另一个进程?...

答案1

您可以使用lsof | grep /absolute/path/to/file.txt它来查看文件是否已打开。如果文件已打开,此命令将返回状态 0,否则将返回 256 (1)。

请注意,此命令将需要一秒钟,因为通常在任何时候都会打开很多文件。

例如,您还可以使用lsof -c gedit查看 gedit 打开了哪个文件。将输出限制在一个进程中将使执行时间几乎为零。

以下是需要等待的脚本:

#!/bin/bash

while :
do
    if ! [[ `lsof -c python3.2 | grep test.py` ]]
    then
        break
    fi
    sleep 0.5
done
echo "done"

当进程“pyhton3.2”打开文件“test.py”时,此程序运行。文件关闭后,程序将转到“echo done”并退出。

我在其中添加了“sleep 0.5”,这样循环就不会严重占用 CPU。否则,它将使用 100% 的 CPU。

奖金 似乎有一种将 odt 转换为 pdf 的简单方法:

感谢 OOo 论坛上的 scls19fr 提供的这个好建议。您可以使用命令行将 OpenOffice Writer 文件转换为 PDF。unoconv -f pdf input.odt要获取 unoconv,只需 sudo apt-get install unoconv在终端上运行即可。 (rhyshale 的 rhyshale.wordpress.com)

相关内容