php-fpm是進程管理器 , 屬於master-worker多進程的模式php
當請求xxx.php文件時 , 每個子worker進程都是在讀取和迴應FastCGI協議的內容web
fastcgi的方式是,fpm啓動運行後 , 會常駐內存監聽端口(默認9000) , 當web服務器收到一個請求時,他不會從新fork一個進程,web服務器直接把內容傳遞給這個進程(進程間通訊,但fastcgi使用tcp方式通訊發送數據到9000端口),這個進程收到請求後進行處理,把結果返回給web服務器,最後本身接着等待下一個請求的到來,而不是退出.服務器
strace $(pidof 'php-fpm'|sed 's/\([0-9]*\)/-p \1/g') -e read,write -s 102400tcp
下圖就是在讀取FastCGI協議的內容php-fpm
使用tcpdump查看9000端口的數據傳遞 , 也能看到fastcgi協議的內容blog
tcpdump -i any port 9000 -l -s 0 -w -|strings進程