守护进程的创建

2016/03/04
博文都是原创  复制请谨慎

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

什么是进程?

> 官方有这样的资料进行查阅的,想了解的可以百度下,我就说下我自己的了解。

一个程序进入内存。告诉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();
	}

	
	


个人随笔

安静的等待,你若盛开,蝴蝶自来

承接高质量 网站开发 app开发 如有需要请点击About联系

作者 @承鹏辉