我正在用 Python (Django) 编写一个 Web 应用程序,它将在旁边执行任务/进程,通常是网络扫描。我希望用户能够终止扫描,实时查看其状态或结果。
我认为最好的方法之一是拥有一个独立进程的作业管理器守护进程,即:
- 通过 TCP 连接接受新作业。
- 接受用户命令,通常用于终止或重新启动进程。
- 报告作业的状态。
我正在为这段代码的结构而苦苦挣扎。我认为守护进程上的 TCP 端口将接受新作业。然后它将创建一个 os.fork(),它本身将创建一个 os.fork()。第二个 fork 将为 nmap 执行 os.execv()。第一个 os.fork() 将监视第二个 fork(如何?),当它完成时,它将向主守护进程报告它已经结束。第一个 fork 还必须能够终止第二个子进程。
听上去怎么样?是否已经完成了这样的结构?我不想重新创建轮子。
最后,子进程如何知道第二个孩子,即运行 os.execv() 的那个已经终止?或者它是否还在运行?我讨厌不断地轮询进程列表。
正如我所说,这必须在 Python 中完成。