您的位置:首页 > 其它

创建守护进程并且接收信号

2016-03-04 13:57 204 查看
 > 官方有这样的资料进行查阅的,想了解的可以百度下,我就说下我自己的了解。

一个程序进入内存。告诉cup怎么执行。链接内存和cpu

    

    他们之间的联系就依靠这个进程

    

    所以进程就是实现调度和管理资源的

    

    首先如果想php进行多进程编程。首先了解下怎么去创建进程

    

    c语言,都是fork  vfork创建的

    php提供了pcntl_fork创建进程的,其实也是fork。

只是c语言对它进行的一种封装(注:个人猜测没有看源码)

    

    那么守护进程是什么的,它随着系统的开始而开始的,系统的消亡而消亡的,常驻内存中。

有什么这样的软件那,比如apapche 还有nginx  等等

    

    那么守护进程有什么好处,能干嘛

    

    比如我想实现一个crontabl的功能,如果不用linux系统命令。

该怎么实现。如果会这些思想。那么写这个程序是很简单的事。

    

    如果会写进程了。那干嘛又要了解信号那,为什么要了解信号。信号就是进程之间进行通信的状态。

    

    以上属于个人理解。如果有不对的。可以评价谢谢  

    

    下面放出一段代码。让大家了解下怎么创建守护进程。怎么接收信号。创建守护进程每隔5秒执行一次写入操作

    

    作者

    @承鹏辉

<?php

function signalHandler($signal) {
global $worker_pid;
if ($signal == SIGINT) {
file_put_contents($worker_pid.'_kill_id.pid',$worker_pid);
exit(0);
}

if ($signal == SIGTERM) {
file_put_contents($worker_pid.'_kill_id.pid',$worker_pid);
exit(0);
}

}

$pid = pcntl_fork();

if ( $pid < 0) {

die('fork failed');

} else if ( $pid > 0 ) {

exit(0);
}

//在子进程注册信号
pcntl_signal(SIGINT, 'signalHandler');
pcntl_signal(SIGTERM, 'signalHandler');

$worker_pid = posix_getpid();

if ($worker_pid){
file_put_contents($worker_pid.'_start_id.pid',$worker_pid);
}

while (1) {
file_put_contents('data.txt',"write name:peen\n",FILE_APPEND);
sleep(5);
pcntl_signal_dispatch();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  创建守护进程