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

2024-04-24 11:44:56 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

或者我最好创建一个存储进程状态信息的数据库?我没有数据库的经验,但这可能是一个很好的学习时间。你知道吗

有什么建议吗?即使是一些想法,我可以谷歌将不胜感激!你知道吗

谢谢


Tags: 工具服务器脚本数据库进程公司页面pid
2条回答

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

这个实现的好坏取决于应用程序的规模。你知道吗

我想你开始的过程是这样的:

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

相关问题 更多 >