如何在php项目中实现一个进程守护进程化

  介绍

本篇文章为大家展示了如何在php项目中实现一个进程守护进程化,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

<强>前言

守护进程音标:[' di: m ?n)中文含义为守护神或精灵的意思。其实它还有个意思:守护进程。

守护进程程序是一直运行的服务端程序,又称为守护进程。通常在系统后台运行,没有控制终端不与前台交互,守护进程程序一般作为系统服务使用.Daemon是长时间运行的进程,通常在系统启动后就运行,在系统关闭时才结束。一般说守护进程程序在后台运行,是因为它没有控制终端,无法和前台的用户交互.Daemon程序一般都作为服务程序使用,等待客户端程序与它通信。我们也把运行的守护进程程序称作守护进程。

每个进程都有一个父进程,子进程退出,父进程能得到子进程退出的状态。

守护进程简单地说就是可以脱离终端而在后台运行的进程。这在Linux中是非常常见的一种进程,比如apache或者mysql等服务启动后,就会以守护进程的方式进驻在内存中。

以PHP为例,假如我有个耗时间的任务需要跑在后台:将所有mysql中用户表中2000年的万用户全部导入到复述中做预热缓存,那么这个任务估计一时半会是不会结束的,这个时候就需要编写一个PHP脚本以守护进程形式运行在系统中,结束后自动推出。

<强>在Linux中,大概有三种方式实现脚本后台化:

1。在命令后添加一个,符号,比如php的任务。php和。这个方法的缺点在于如果终端终端关闭,无论是正常关闭还是非正常关闭,这个php进程都会随着终端关闭而关闭,其次是代码中如果有回声或者print_r之类的输出文本,会被输出到当前的终端窗口中。

2。使用nohup命令,比如nohup php的任务。php和。默认情况下,代码中回声或者print_r之类输出的文本会被输出到php代码同级目录的nohup。从文件中。如果你用退出命令或者关闭按钮等正常手段关闭终端,该进程不会被关闭,依然会在后台持续运行。但是如果终端遇到异常退出或者终止,该php进程也会随即退出。本质上,也并非稳定可靠的守护进程方案。

3。使用叉和setsid,我暂且称之为:* nix解决方案。具体看下代码:

& lt; php ?   ,//一次fork    ,pid 美元;=,pcntl_fork ();   ,if  (, pid 美元;& lt;, 0,), {   退出才能(& # 39;大敌;fork 错误只& # 39;,);   ,}else 如果(,pid 美元;祝辞,0,),{   退出才能(& # 39;大敌;parent 过程只& # 39;,);   ,}   ,//将当前子进程提升会会话组组长,这是至关重要的一步,   ,if (!大敌;posix_setsid (),), {   退出才能(& # 39;大敌;setsid 错误只& # 39;,);   ,}   ,//二次叉   ,pid 美元;=,pcntl_fork ();   ,如果,pid 美元;& lt;, 0,) {   退出才能(& # 39;大敌;fork 错误只& # 39;,);   ,}else 如果(,pid 美元;祝辞,0,),{   退出才能(& # 39;大敌;parent 过程只& # 39;,);   ,}   ,//真正的逻辑代码们,下面仅仅写个循环以示例   ,(,小姐:美元=,1,,,小姐:美元& lt;=, 100,,,我+ +,美元){   睡眠才能(,1);   ,,,写入& # 39;daemon.log& # 39;,,我,,FILE_APPEND );   ,}   ?在

上述内容就是如何在php项目中实现一个进程守护进程化,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。

如何在php项目中实现一个进程守护进程化