diff --git a/lib/ngx/process.lua b/lib/ngx/process.lua index db2d653ac..ebdbfb23c 100644 --- a/lib/ngx/process.lua +++ b/lib/ngx/process.lua @@ -31,6 +31,7 @@ ffi.cdef[[ int ngx_http_lua_ffi_enable_privileged_agent(char **err); int ngx_http_lua_ffi_get_process_type(void); void ngx_http_lua_ffi_process_signal_graceful_exit(void); +int ngx_http_lua_ffi_master_pid(void); ]] @@ -60,4 +61,14 @@ function _M.signal_graceful_exit() end +function _M.master_pid() + local pid = C.ngx_http_lua_ffi_master_pid() + if pid < 0 then + return nil + end + + return pid +end + + return _M diff --git a/t/process-master-pid.t b/t/process-master-pid.t new file mode 100644 index 000000000..04f0ba2dd --- /dev/null +++ b/t/process-master-pid.t @@ -0,0 +1,78 @@ +# vim:set ft= ts=4 sw=4 et fdm=marker: +use lib 'lib'; +use Test::Nginx::Socket::Lua; +use Cwd qw(cwd); + +#worker_connections(1014); +#master_process_enabled(1); +#log_level('warn'); + +repeat_each(2); + +plan tests => repeat_each() * (blocks() * 6); + +my $pwd = cwd(); + +our $HttpConfig = <<_EOC_; + lua_shared_dict dogs 1m; + lua_package_path "$pwd/lib/?.lua;../lua-resty-lrucache/lib/?.lua;;"; + init_by_lua_block { + local verbose = false + if verbose then + local dump = require "jit.dump" + dump.on("b", "$Test::Nginx::Util::ErrLogFile") + else + local v = require "jit.v" + v.on("$Test::Nginx::Util::ErrLogFile") + end + + require "resty.core" + -- jit.off() + } +_EOC_ + +#no_diff(); +#no_long_string(); +check_accum_error_log(); +run_tests(); + +__DATA__ + +=== TEST 1: ngx.process.master_pid +--- http_config eval: $::HttpConfig +--- config + location = /t { + content_by_lua_block { + local process = require "ngx.process" + + local v + local pid = process.master_pid + for i = 1, 400 do + v = pid() + end + + local f = io.open(ngx.config.prefix().."/logs/nginx.pid", "r") + if not f then + ngx.say(false) + else + local str = f:read("*l") + ngx.say(v == tonumber(str or "0")) + f:close() + end + ngx.say(v) + } + } +--- request +GET /t +--- response_body_like chop +^true +\d+$ +--- error_log eval +qr/\[TRACE \d+ content_by_lua\(nginx\.conf:\d+\):\d loop\]/ +--- no_error_log +[error] + -- NYI: + stitch + + +