如何在进程完成时执行操作,同时有多个进程正在运行

时间:2011-12-14 16:57:14

标签: php python process

我正在为我的公司制作扫描服务器,它将用于从nessus,nmap,nikto等工具启动扫描。我已经用php编写了这些页面,所以一旦扫描启动它就会背景处理并返回PID。设计规范的一部分是,扫描完成后,结果将通过电子邮件发送给合适的顾问。这是我正在寻找一些想法的地方,因为我不知道如何去做。

我是否最好让php脚本将PID提供给python(我的主要语言)脚本的实例,该脚本经常检查过程是否已完成,例如?我确实尝试在PHP页面中放置这个进程检查循环,但显然这会使PHP页面在等待扫描完成时暂停,这对我不利,因为将运行多个扫描。

或者我会更好地创建一个存储有关进程的状态信息的数据库?我没有数据库经验,但这可能是学习的好时机。

有什么建议吗?甚至一些我可以谷歌的想法将非常感激!

由于

2 个答案:

答案 0 :(得分:2)

当我遇到这种问题时,我通常会做一个完成整个工作的Python守护进程,让PHP只是向这个Python守护进程发送消息。这些消息可以非常简单,就像经常检查的目录中的一堆文件,或者在数据库中注册。

这种影响有多好取决于你的申请规模。

答案 1 :(得分:2)

我认为你正在开始这样的过程:

exec("/path/to/file > /dev/null 2>&1 &");

...在这种情况下,您可以在中间添加另一个脚本:

exec("/path/to/file | php /some/php/script.php > /dev/null 2>&1 &");

然后,在script.php中(或者如果你想在python中做),你可以这样做:

while (!feof(STDIN)) {
  sleep(1); // ...or something less horrible that also avoids racing
}

// When you get here, the process has finished