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
}
相关推荐
-
Linux中fork()函数实例分析
一.fork 入门知识 一个进程,包括代码.数据和分配给进程的资源.fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事. 一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间.然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进程的值不同.相当于克隆了一个自己. 我们来看一个例子: /* * fork_test.c * version 1 * C
-
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和exec详解
在python中,任务并发一种方式是通过进程分支来实现的.在linux系统在,通过fork()方法来实现进程分支. 1.fork()调用后会创建一个新的子进程,这个子进程是原父进程的副本.子进程可以独立父进程外运行. 2.fork()是一个很特殊的方法,一次调用,两次返回. 3.fork()它会返回2个值,一个值为0,表示在子进程返回;另外一个值为非0,表示在父进程中返回子进程ID. 以下只能在linux中运行,不能在window下运行. 进程分支fork() 实例如下: 复制代码 代码如下:
-
小结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系统中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)函数说明 一
-
git fork同步是什么意思?
官方文档:http://help.github.com/fork-a-repo/ 概要: 克隆别人的代码库到自己的项目中,可以作为子模块的形式使用,或二次开发 操作流程: 在开源项目中点击fork按钮,稍等一会儿,该项目便会拷贝一份到你的respositories中,克隆一份代码到本地:git clone git@github.com:username/Spoon-Knife.git 配置:(项目克隆完成后,默认远程的别名为origin,此为我们自己项目中的版本,并非原始作者的代码库) 创建原始
-
PHP使用pcntl_fork实现多进程下载图片的方法
本文实例讲述了PHP使用pcntl_fork实现多进程下载图片的方法.分享给大家供大家参考.具体分析如下: PHP pcntl_fork - 在当前进程当前位置产生分支,子进程,译注:fork是创建了一个子进程,父进程和子进程 都从fork的位置开始向下继续执行,不同的是父进程执行过程中,得到的fork返回值为子进程号,而子进程得到的是0. 注意:PHP有个pcntl_fork的函数可以实现多进程,但要加载pcntl拓展,而且只有在linux下才能编译这个拓展. 1.首先在ubuntu下编译pc
-
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/
-
Apache Prefork、Worker和Event三种MPM详解
Apache 2.X 支持插入式并行处理模块,称为多路处理模块(MPM).在编译apache时必须选择也只能选择一个MPM,对类UNIX系统,有几个不同的MPM可供选择,它们会影响到apache的速度和可伸缩性. Prefork MPM : 这个多路处理模块(MPM)实现了一个非线程型的.预派生的web服务器,它的工作方式类似于Apache 1.3.它适合于没有线程安全库,需要避免线程兼容性问题的系统.它是要求将每个请求相互独立的情况下最好的MPM,这样若一个请求出现问题就不会影响到其他请求.
随机推荐
- 利用java+mysql递归实现拼接树形JSON列表的方法示例
- Linux定时任务Crontab详解(推荐)
- apache虚拟主机配置一例
- Java发送带html标签内容的邮件实例代码
- 详解ASP.NET-----Repeater数据控件的用法总结
- 原生js仿jquery animate动画效果
- Visual Studio 2017正式版离线安装教程
- php实现excel中rank函数功能的方法
- JS中捕获console.log()输出的方法
- 解决mysql创建数据库后出现:Access denied for user 'root'@'%' to database 'xxx'的问题
- php 数据库字段复用的基本原理与示例
- php缓冲输出实例分析
- WML语言的基本情况
- Powershell直接脚本时出现无法加载文件因为禁止执行脚本
- mysql中使用sphinx搜索子域名需注意的问题
- jQuery插件zTree实现的基本树与节点获取操作示例
- Android编程之控件可拖动的实现方法
- 信用卡效验程序
- 深入浅出webpack之externals的使用
- 深入分析Android加载so文件源码
