当前位置: 首页 > 工具软件 > mini-httpd > 使用案例 >

关于 mini_httpd(web server) 调用 CGI 进程(脚本) 写终端问题

韦宣
2023-12-01

因为 LINUX 主机的进程组策略,完全严格的 Daemon 进程无法写终端。

当一个进程既不是它自身的父进程,同时它也不是组长进程的时候,它就是严格的的 daemon 进程。

    mini_httpd 本身并不是严格的 daemon 进程。它是一个组长进程。

但是 mini_httpd 调用的 cgi 进程,就不是组长进程,它是 mini_httpd 进程组中的一个进程。

所以 cgi 在获取终端 fd 的时候会失败,内核会发送一个信号。如果不对信号进行处理的话,默认情况下进程将结束。

 


 

在具体的是实现细节上:

mini_httpd 使用 select->accept->fork 模型。

在子进程中 handle HTTP 请求(TCP socket),子进程进行必要的处理之后,将 STDOUT,STDIN 做了 dup2 修改(具体绑定到 socket 上还是 pipe 上我没有仔细研究)。因此继续往下运行,再调用 exec 系的函数,切换执行 cgi 程序,cgi 程序的标准输出即等同于 TCP socket 的 payload,即输出就是 HTTP 整个协议头+正文内容。

所以 cgi 程序也不能通过直接输出到终端的方式来 debug。

 

 Reference: AUPE

 类似资料: