本节主要讲解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。php-fpm
返回父进程id。性能
设置新会话组长,脱离终端。成功时返回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); } }
若是程序须要以守护进程的方式执行,在业务代码以前调用该函数便可。code
防盗版声明:本文系原创文章,发布于公众号飞鸿影的博客
(fhyblog)及博客园,转载需做者赞成。blog
什么是进程池? 实际上是很简单的概念,就是预先建立一组子进程,当有新任务来时,系统经过调配该组进程中的某个子进程完成此任务。
前面几节的示例里咱们都是使用这种方式,预先建立好进程,而不是动态建立。
引入《Linux高性能服务器编程》的一段话,描述动态建立进程的缺点:
- 动态建立进程(或线程)比较耗费时间,这将致使较慢的客户响应。
因此任什么时候候,建议预先建立好进程,也就是使用进程池的方式实现。
像咱们熟知的php-fpm还支持最大建立多少个进程、初始建立多少个进程这种方式,你们感兴趣能够研究研究。
(未完待续)