看了 workerman 的源碼,在 fork 子進(jìn)程的時候,子進(jìn)程退出 用的是exit(0)。但是有的地方退出用的是 exit(250),請問為什么會有這些區(qū)別,這些數(shù)字什么意思?
exit 用法參見php手冊 http://php.net/manual/zh/function.exit.php
exit($exit_code) $exit_code為0,代表進(jìn)程正常退出,例如執(zhí)行了reload。
$exit_code 如果是不為0的數(shù)字(0-254之間),代表異常退出,比如Exception異常,底層錯誤導(dǎo)致程序不可能繼續(xù)執(zhí)行時等等,要執(zhí)行退出時可以加一個狀態(tài)碼。
主進(jìn)程可以通過 http://php.net/manual/zh/function.pcntl-wait.php 獲取子進(jìn)程退出狀態(tài)status,可以用 pcntl_wifexited(), pcntl_wifstopped(), pcntl_wifsignaled(), pcntl_wexitstatus(), pcntl_wtermsig()以及 pcntl_wstopsig()等函數(shù)計算出status對應(yīng)的進(jìn)程退出碼,從而得知子進(jìn)程是否是正常退出,因為什么原因異常退出。
例如在workerman里,如果發(fā)生業(yè)務(wù)未捕獲的異常,則框架會記錄日志并執(zhí)行exit(250),主進(jìn)程pcntl_wait會立刻捕獲進(jìn)程退出事件,并且status值為6400。
另外通過php start.php status 能看到哪些進(jìn)程退出,status是多少,就知道發(fā)生哪些退出碼,能夠了解哪些進(jìn)程因為什么原因退出過。
status命令參見workerman手冊 http://doc3.workerman.net/advanced/status.html