PHP创建守护进程(有遗留问题)
来源:互联网 发布:sql查询字段包含字母 编辑:程序博客网 时间:2024/05/16 07:48
因为项目需要,需要写一个守护进程,虽然用crontab也是可以实现的,但是crontab存在许多的不足(容易产生overlap,数据无法共享)
在别人的blog里看到了守护进程的实现(unix),因此在linux环境中用php语言实现原理也是一样的,因此可以借鉴。
先普及一下进程组,会话,控制终端:
a.一个会话可以对应多个进程组
b.一个会话只能对应一个控制终端
c.进程组组长无法创建一个新的会话,但是可以创建控制终端
b.进程组的组员可以创建一个新的会话,但无法创建控制终端
c.进程只能属于一个进程组,也必定属于一个进程组
创建守护进程:
1.使用pcntl_fork()创建一个子进程(同时退出父进程)
2.使用posix_setsid()新创建一个session
关于posix_setsid()的说明:
当它调用成功的时候,会创建一个新的session,并把当前的进程设置为session leader。(从而脱离之前的session,之前的session是通过终端建立连接然后创建的。)同时也会脱离当前的进程组,创建一个新的进程组并且担任进组组长。同时新创建的session没有控制终端。
3.创建无法创建控制终端的进程(重新pcntl_fork一个子进程,退出父进程)
4.修改它的工作目录(因为工作目录可能被umount)
5.修改工作目录的权限(子进程继承父进程的文件和文件权限)
6.处理SIGCHLD信号()
上代码:
<?phpdeclare(ticks = 1);$pid = pcntl_fork();if($pid>0){ echo "parent pid".getmypid(); exit(0);}echo "child pid".getmypid();chdir("/");posix_setsid();umask(0);$pid_d = pcntl_fork();if($pid_d > 0){ echo "Daemon PID $pid_d"; exit(0);}funzioneDemo();function funzioneDemo(){ while(true){ $handle = fopen("/tmp/demon1e.log","w+"); fput($handle, time()); fclose($handle); }}?>
- PHP创建守护进程(有遗留问题)
- php 创建守护进程
- 创建守护进程(转载)
- 创建守护进程(Daemon)
- 如何创建守护进程(转)
- Linux 创建守护进程(daemon)
- 创建守护进程步骤
- 守护进程 创建 详解
- python 创建守护进程
- 如何创建守护进程
- 守护进程的创建
- 如何创建守护进程
- 创建守护进程
- 守护进程创建步骤
- golang 创建守护进程
- linux创建守护进程
- 创建守护进程 daemon
- 创建守护进程
- 黑马程序员:内省(IntroSpector)与JavaBean的介绍
- Android总结之drawable(hdpi,mdpi,ldpi)文件夹的使用
- 歌手大奖赛计分系列之求最后得分
- Java实现简单的Socket服务器与客户端字符串通讯(适合初学者阅读)
- IT学生解惑真经
- PHP创建守护进程(有遗留问题)
- 十进制显示出十六进制
- 有关Android的Activity背景图片设置和传递
- 使用Python Tkinter编写的简易发送邮件程序
- Eclipse中的警告信息和拼写错误信息的设置
- CreateProcess函数详解及示例
- 动态规划之Loli分房间
- Linphone 位置记录
- 常用mfc类的基本使用