我正在将文件MRXS转换为TIFF。有时候需要。在此任务完成后,我想调用另一个shell_exec。但我不知道转换什么时候完成。
shell_exec("vips openslideload /tmpSlides/" . $path . " /tmpSlides/test.tiff[tile,compression=lzw]");此命令开始转换任务。创建一个空的tiff文件,并且这个tiff文件的大小在增加,直到任务完成。
我要查一下,那个文件还在用吗?如果这个文件没有使用,我会理解任务完成。或者是否有检查任务完成的方法?
我想写这样的东西:
if(RUN_UNTIL_CONVERTION_DONE("/tmpSlides/test.tiff")) {
shel_exec(
"kdu_compress.exe -i /tmpSlides/test.tiff -o /tmpSlides/test.jp2 Creversible=yes -rate 0.25 Clayers=1 Clevels=7 Cprecincts={256,256} Cblk={64,64} Corder=RPCL Cuse_sop=yes Stiles={1024,1024} ORGgen_plt=yes ORGtparts=R");
}发布于 2018-10-18 10:11:07
基本上它取决于您的操作系统。Unixes和Windows使用不同的方法来检查这一点,因此我将向您展示两个案例:
视窗
对于Windows,有一个名为手柄的程序将显示哪个程序使用您的文件。安装它,然后在PHP中使用shell_exec('handle <your file>')并解析输出以检查您的vips程序是否仍在修改文件。您甚至可以在句柄中使用-p选项将检查限制在vips进程。
Unix
在Unix派生系统(POSIX)上,您可以使用名为fuser的内置工具执行以下操作:
fuser <your file>
然后,对于Windows,使用shell_exec命令并解析结果,以检查您的文件是否已完成编辑。
另一种方式
另一种方法是检查进程是否仍在执行。因此,在Linux上,您可以使用ps aux和管道中的grep来过滤您要查找的进程,并检查它是否仍在运行。不幸的是,在Windows中没有这样的方法,因为tasklist没有显示为启动的进程提供的选项。
https://stackoverflow.com/questions/52871468
复制相似问题