一年后,我问了这个问题,我似乎找到了答案。
(gdb) bt
#0 close () at ../sysdeps/unix/syscall-template.S:84
#1 0x0000000000a40dff in fcgi_close (req=0x1dae3c0, force=0, destroy=1) at /home/dinosaur/Downloads/php-7.2.2/main/fastcgi.c:1311
#2 0x0000000000a41a0d in fcgi_finish_request (req=0x1dae3c0, force_close=0) at /home/dinosaur/Downloads/php-7.2.2/main/fastcgi.c:1670
#3 0x0000000000a4d3b3 in sapi_cgi_deactivate () at /home/dinosaur/Downloads/php-7.2.2/sapi/fpm/fpm/fpm_main.c:828
#4 0x00000000008bcf35 in sapi_deactivate () at /home/dinosaur/Downloads/php-7.2.2/main/SAPI.c:532
#5 0x00000000008afa0e in php_request_shutdown (dummy=0x0) at /home/dinosaur/Downloads/php-7.2.2/main/main.c:1913
#6 0x0000000000a50614 in main (argc=1, argv=0x7ffc8b6936e8) at /home/dinosaur/Downloads/php-7.2.2/sapi/fpm/fpm/fpm_main.c:1994
当php-fpm启动时,在初始化之后,它会在while循环中处理每个请求
while (fcgi_accept_request(request) >= 0) {
...
php_execute_script(&file_handle); // zend engine compile and run the opcode
...
php_request_shutdown((void *) 0); // close connection
}
在功能fcgi_accept_request中,套接字fd为4
1411 req->fd = accept(listen_socket, (struct sockaddr *)&sa, &len);
(gdb) n
1414 client_sa = sa;
Breakpoint 6, fcgi_accept_request (req=0x1dae3c0) at /home/dinosaur/Downloads/php-7.2.2/main/fastcgi.c:1414
1414 client_sa = sa;
(gdb) p req->fd
$18 = 4
当关闭时,它关闭套接字fd 4
Breakpoint 4, fcgi_close (req=0x1dae3c0, force=0, destroy=1) at /home/dinosaur/Downloads/php-7.2.2/main/fastcgi.c:1272
1272 {
(gdb) p req->fd
$19 = 4
结论
所以,我认为在php7中,请求完成后fpm关闭,因此它不是持久连接?