php pcntl_fork和pcntl_fork 的用法
pcntl_fork()函数就是为当前的进程创建一个子进程。并且先运行父进程,返回的是子进程的PID,肯定大于零。在父进程的代码中可以用pcntl_fork(&$status)暂停父进程知道他的子进程有返回值。注意:父进程的阻塞同时会阻塞子进程。但是父进程的结束不影响子进程的运行。
父进程运行完了会接着运行子进程,这时子进程会从执行pcntl_fork()的那条语句开始执行(包括此函数),但是此时它返回的是零(代表这是一个子进程)。在子进程的代码块中最好有exit语句,即执行完子进程后立即就结束。否则它会又重头开始执行这个脚本的某些部分(一直没有总结出规矩)。
总之,注意两点:
1。子进程最好有一个exit;语句,防止不必要的出错;
2.
代码如下:
$pid = pcntl_fork();
//这里最好不要有其他的语句
if ($pid == -1) {
die('could not fork');
} else if ($pid) {
// we are the parent
pcntl_wait($status); //Protect against Zombie children
} else {
// we are the child
}
相关推荐
-
Python中的进程分支fork和exec详解
在python中,任务并发一种方式是通过进程分支来实现的.在linux系统在,通过fork()方法来实现进程分支. 1.fork()调用后会创建一个新的子进程,这个子进程是原父进程的副本.子进程可以独立父进程外运行. 2.fork()是一个很特殊的方法,一次调用,两次返回. 3.fork()它会返回2个值,一个值为0,表示在子进程返回;另外一个值为非0,表示在父进程中返回子进程ID. 以下只能在linux中运行,不能在window下运行. 进程分支fork() 实例如下: 复制代码 代码如下:
-
Linux系统中C语言编程创建函数fork()执行解析
最近在看进程间的通信,看到了fork()函数,虽然以前用过,这次经过思考加深了理解.现总结如下: 1.函数本身 (1)头文件 #include<unistd.h> #include<sys/types.h> (2)函数原型 pid_t fork( void); (pid_t 是一个宏定义,其实质是int 被定义在#include<sys/types.h>中) 返回值: 若成功调用一次则返回两个值,子进程返回0,父进程返回子进程ID:否则,出错返回-1 (3)函数说明 一
-
Apache Prefork、Worker和Event三种MPM详解
Apache 2.X 支持插入式并行处理模块,称为多路处理模块(MPM).在编译apache时必须选择也只能选择一个MPM,对类UNIX系统,有几个不同的MPM可供选择,它们会影响到apache的速度和可伸缩性. Prefork MPM : 这个多路处理模块(MPM)实现了一个非线程型的.预派生的web服务器,它的工作方式类似于Apache 1.3.它适合于没有线程安全库,需要避免线程兼容性问题的系统.它是要求将每个请求相互独立的情况下最好的MPM,这样若一个请求出现问题就不会影响到其他请求.
-
grails不能运行fork模式解决方法
升级到grails 2.3.2之后,运行时报如下的异常: 复制代码 代码如下: Exception in thread "main"Error |Forked Grails VM exited with error java.lang.instrument ASSERTION FAILED ***: "!errorOutstanding" with message transform method call failed at ../../../src/share/
-
git fork同步是什么意思?
官方文档:http://help.github.com/fork-a-repo/ 概要: 克隆别人的代码库到自己的项目中,可以作为子模块的形式使用,或二次开发 操作流程: 在开源项目中点击fork按钮,稍等一会儿,该项目便会拷贝一份到你的respositories中,克隆一份代码到本地:git clone git@github.com:username/Spoon-Knife.git 配置:(项目克隆完成后,默认远程的别名为origin,此为我们自己项目中的版本,并非原始作者的代码库) 创建原始
-
Linux中fork()函数实例分析
一.fork 入门知识 一个进程,包括代码.数据和分配给进程的资源.fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事. 一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间.然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进程的值不同.相当于克隆了一个自己. 我们来看一个例子: /* * fork_test.c * version 1 * C
-
PHP使用pcntl_fork实现多进程下载图片的方法
本文实例讲述了PHP使用pcntl_fork实现多进程下载图片的方法.分享给大家供大家参考.具体分析如下: PHP pcntl_fork - 在当前进程当前位置产生分支,子进程,译注:fork是创建了一个子进程,父进程和子进程 都从fork的位置开始向下继续执行,不同的是父进程执行过程中,得到的fork返回值为子进程号,而子进程得到的是0. 注意:PHP有个pcntl_fork的函数可以实现多进程,但要加载pcntl拓展,而且只有在linux下才能编译这个拓展. 1.首先在ubuntu下编译pc
-
python高并发异步服务器核心库forkcore使用方法
1 拷贝下面的代码到一个文件,并命名为forkcore.py 复制代码 代码如下: import osimport threadingimport selectimport socket class ds_forkcore(object): #async IO(epoll) def ds_epoll(self): epoll=select.epoll() epoll.register(self.s.fileno(),select.EPOLLIN|select.E
-
深入理解apahce的工作模式perfork、worker
prefork模式使用多个子进程,每个子进程只有一个线程.每个进程在某个确定的时间只能维持一个连接.在大多数平台上,Prefork MPM在效率上要比Worker MPM要高,但是内存使用大得多.prefork的无线程设计在某些情况下将比worker更有优势:它可以使用那些没有处理好线程安全的第三方模块,并 且对于那些线程调试困难的平台而言,它也更容易调试一些. worker模式使用多个子进程,每个子进程有多个线程.每个线程在某个确定的时间只能维持一个连接.通常来说,在一个高流量的HTTP服务器
-
小结Python用fork来创建子进程注意事项
自己随手写了Python下 fork 进程的测试代码(来说明这个问题不一定完全合适): def fork(a): def now(): import datetime return datetime.datetime.now().strftime("%S.%f") import os import time print now(), a if os.fork() == 0: print '子进程[%s]:%s' % (now(), os.getpid()) while 1: a-=10
随机推荐
- Linux下编写Lua扩展so文件和调用方法实例
- jQuery html()等方法介绍
- thinkphp实现面包屑导航(当前位置)例子分享
- Tomcat显示8080端口被占用的图文解决方法
- JavaScript调用堆栈及setTimeout使用方法深入剖析
- Python实现数据库编程方法详解
- android内存及内存溢出分析详解
- Python中os和shutil模块实用方法集锦
- 通过表单的做为二进制文件上传request.totalbytes提取出上传的二级制数据
- JQuery 在文档中查找指定name的元素并移除的实现方法
- 详解jQuery Mobile自定义标签
- JQuery DIV 动态隐藏和显示的方法
- 网页代码常用小技巧总结第1/3页
- 用WinRAR解析木马病毒的捆绑原理
- 用vbs实现cmd多命令运行功能代码
- Python实现SVN的目录周期性备份实例
- python+opencv识别图片中的圆形
- java用类加载器的5种方式读取.properties文件
- Python3 导入上级目录中的模块实例
- 易语言子文本替换命令使用讲解