一、nginx工作進程處理簡單請求時的系統(tǒng)調用
1.找到nginx的工作進程
ps aux |grep nginx
image.png
2.使用strace監(jiān)控該進程
strace -p 5439
3.對nginx發(fā)起簡單get請求
wget localhost
4.strace監(jiān)控結果

image.png
二、簡單分析(參考《深入剖析Nginx》)
1.epoll_wait返回值為1,表示1個描述符存在可讀寫事件。epoll_wait用于輪詢I/O事件的發(fā)生。關于epoll,可以參考epoll_create, epoll_ctl和epoll_wait 實例講解。
2.accept4接受請求,返回的3為socket的文件描述符。
3.epoll_ctl把accept4返回的套接字加入到事件監(jiān)聽機制里。
4.recvf從該socket文件描述符內讀取數(shù)據(jù)。
5.stat判斷文件index.html是否存在。
6.open打開文件index.html,返回文件描述符9。
7.fstat獲取文件狀態(tài)
7.writev通過描述符3將響應頭寫出。
8.sendfile把文件描述符9代表的文件通過描述符3f發(fā)出。
9.write往文件描述符4中寫日志信息。
10.close關閉文件描述符9。
...
