当 PHP exec 函数创建一个进程时,它在哪里排队以便可以通过编程方式或从命令行删除它?

When PHP exec function creates a process, where is it queued so that it can be removed programmatically or from command line?

我有一个 PHP 脚本,其中 运行 包含以下代码:

exec("ls $image_subdir | parallel -j8 tesseract $image_subdir/{} /Processed/OCR/{.} -l eng pdf",$output, $result_code);

代码 运行s,但是,即使在我终止 PHP 脚本并关闭浏览器之后,它仍会继续创建 pdf 文件(数千个)。已经 24 小时了,还是 运行ning。当我 运行 一个 ps 命令时,它只显示创建的 8 个当前进程。

我怎样才能找到所有挂起的 运行ning 并杀死它们?我相信我可以简单地重新启动 Apache/PHP,但我想知道这些挂起的进程在哪里以及如何关闭或控制它们。最初似乎代码在执行上述代码时等待了一分钟,然后继续执行 PHP 脚本中的下一行代码。所以它似乎在某处创建了作业,然后继续执行下一行代码。

是不是ps并行命令特有的东西?非常感谢任何信息。谢谢。

作业似乎是由 perl 进程生成的:

perl /usr/bin/parallel -j8 tesseract {...基本上是 php 脚本中 exec() 函数调用的代码}

perl 是由 gnu 并行命令或 php 的 exec 函数调用的。在任何情况下,htop 都不允许终止进程并且不会产生任何错误或状态,因此它可能是阻止 htop 终止进程的权限问题。所以它是在命令行上使用 sudo 完成的,它最终终止了进程并停止了从原始 PHP exec() 调用创建的任何进一步进程。