本節主要講解Posix經常使用函數和進程池的概念,也會涉及到守護進程的知識。本節難度較低。php
向指定pid進程發送信號。成功時返回 TRUE
, 或者在失敗時返回 FALSE
。編程
bool posix_kill ( int $pid , int $sig )
$sig=0
,能夠檢測進程是否存在,不會發送信號。服務器
示例:session
//向當前進程發送SIGUSR1信號 posix_kill ( posix_getpid (), SIGUSR1 );
注:經過
kill -l
能夠看到Linux下全部的信號常量。
返回當前進程id。函數
返回父進程id。php-fpm
設置新會話組長,脫離終端。成功時返回session id,失敗返回 -1。寫守護進程(Daemon) 用到該函數。下面引用Workerman源代碼裏的一段示例:性能
function daemonize(){ umask(0); $pid = pcntl_fork(); if (-1 === $pid) { die('fork fail'); } elseif ($pid > 0) { exit(0); } if (-1 === posix_setsid()) { die("setsid fail"); } // Fork again avoid SVR4 system regain the control of terminal. $pid = pcntl_fork(); if (-1 === $pid) { die("fork fail"); } elseif (0 !== $pid) { exit(0); } }
若是程序須要以守護進程的方式執行,在業務代碼以前調用該函數便可。spa
防盜版聲明:本文系原創文章,發佈於公衆號飛鴻影的博客
(fhyblog)及博客園,轉載需做者贊成。線程
什麼是進程池? 實際上是很簡單的概念,就是預先建立一組子進程,當有新任務來時,系統經過調配該組進程中的某個子進程完成此任務。code
前面幾節的示例裏咱們都是使用這種方式,預先建立好進程,而不是動態建立。
引入《Linux高性能服務器編程》的一段話,描述動態建立進程的缺點:
- 動態建立進程(或線程)比較耗費時間,這將致使較慢的客戶響應。
因此任什麼時候候,建議預先建立好進程,也就是使用進程池的方式實現。
像咱們熟知的php-fpm還支持最大建立多少個進程、初始建立多少個進程這種方式,你們感興趣能夠研究研究。
(未完待續)
歡迎關注公衆號及時獲取最新文章推送!
推薦!每個月僅需$2.5,便可擁有配置SSD的VPS!