问题标签 [pcntl]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
php - 在 Ubuntu PHP 中启用 PCNTL - 测试失败
我需要有关如何:在 Ubuntu PHP 中启用 PCNTL 的帮助。
一切都很顺利,直到我尝试运行 phpize!然后我得到错误'-bash:phpize:找不到命令'??有任何想法吗?
更新运行:
然后跑:
在尼克的帮助下,我设法完成了这个程序。但是'make test'失败了???
帮助:我输入了 'echo "extension=pcntl.so > /etc/php5/conf.d/pcntl.ini' 而不是 'echo "extension=pcntl.so" > /etc/php5/conf.d/pcntl.ini ' 我第一次运行这个。那很糟糕吗?
--------------------------------- 制作测试错误信息 ------------- -------------------------
有任何想法吗!?!卡尔
php - PHP 分叉和内存共享让我抓狂
我花了几个小时和几天来找到为什么要php
在我的分叉子代之间共享内存,我认为如果父代在分叉之前在函数中设置了一个 var,那么该函数将始终在子代中返回相同的结果:~
如果您运行此示例,它会很好,孩子们将输出不同的数字。但是,如果您取消注释第一个$this->runChildProcess($i);
,那么您会看到所有孩子都将返回相同的结果(第一个由孩子计算的结果)
我不知道如何处理:(
php - 杀死fork进程
我想写一个 php 脚本在后台运行。这需要pcntl_fork。我使用这个函数来分叉一个孩子:
我在一分钟内用下面这样的片段来称呼它:
所以,它只能优雅地工作几分钟。我用 'ps -ax | 检查了这个过程 grep php'。我看到有这么多的过程永远不会结束,直到代码给出 35 错误,这意味着我们没有更多的内存来运行它!这是 'ps -ax | 的结果 grep php'
当我取消注释 //pcntl_waitpid($pid, $status); 它就像一个魅力,没有任何问题,永远。但我不希望父母等待孩子的工作。任何事情都会有所帮助。
php - PHP fork 和处理 MySQL 数据库没有冲突
我有一个需要处理的 MySQL 数据库表。处理 3 行大约需要 1 秒(由于我需要为每一行建立 CURL 连接)。因此,我需要分叉 PHP 脚本以获得合理的时间(因为我将处理多达 10,000 行的一批)。
我将一次运行 10-30 个进程,显然我需要一些方法来确保进程不重叠(就它们正在检索和修改的行而言)。
根据我的阅读,有三种方法可以实现这一点。我正在尝试确定哪种方法最适合这种情况。
选项 1:开始事务并使用SELECT ... FOR UPDATE
并限制每个进程的行数。将数据保存到数组中。使用“处理”状态标志更新选定的行。提交事务,然后将选定的行更新为“已完成”状态。
选项 2:使用“处理”状态标志和进程 ID 更新一定数量的行。选择该进程 ID 和标志的所有行。像平常一样处理数据。更新这些行并将标志设置为“完成”。
选项 3:为每个进程的查询设置一个LIMIT ... OFFSET ...
子句SELECT
,以便每个进程都可以使用唯一的行。然后存储行 ID 并UPDATE
在完成后执行。
我不确定哪个选项最安全。我认为选项 3 似乎很简单,但我想知道有什么方法会失败吗?选项2似乎也很简单,但我不确定是否由于锁定UPDATE
导致一切变慢。选项 1 似乎是最好的选择,但我对FOR UPDATE
交易不是很熟悉,可以使用一些帮助。
更新:为清楚起见,我目前只有一个文件 process.php,它选择所有行并通过 Curl 将数据一一发布到第三方。我想在这个文件中有一个 fork,所以 10,000 行可以分成 10-30 个子进程。
php - 用于 MAMP 的 PCNTL 与 php5.4.4。和 OSX 10.8
我在互联网上找到的所有说明都是针对旧版本的 phpize、MAMP、php 和 OSX。
我尝试按照以下说明进行操作:
使用 php5.4.4 和 OSX 10.8,但我一直遇到这个问题:
我的问题是,如何使用 API=20100525 编译它,我升级了基础 php,所以我使用的是 5.4.4 phpize:
当我运行 make test 我得到:
我觉得这就是问题所在,任何帮助将不胜感激。
php - Checking PCNTL extension installed in PHP
One of background scripts in my project uses PCNTL to fork. Also, I have a requirement checker script that should be run by user before script installation. Since pcntl can be accessed only in CGI mode, both function_exists('pcntl_fork')
and extension_loaded('pcntl')
return FALSE
in Web mode, so my checker shows always requirement error, as it launched via browser, even if it is enabled. Is there any method to check pcntl
support is enabled from web mode?
php - 传入信号是否崩溃阻塞在 php 应用程序中的流上
我在我的代码中使用了 pcntl 扩展,如下所示:我将处理程序绑定到某个信号,例如 SIGUSR1,并有一个向我的应用程序发送信号的脚本。
我有这样一个错误:
我还有一个通过 ssh 执行远程命令的代码(功能的一部分):
如果在此处引发信号,则会出现以下错误:“Failure 'would block' (-9)”
有没有办法避免这种情况?
php - 为什么 pcntl_fork() 复制 PHP 对象?
pcntl_fork()的手册说:
pcntl_fork() 函数创建一个子进程,该子进程与父进程的区别仅在于它的 PID 和 PPID。
然而,运行这个简单的测试让我感到惊讶:
结果如下所示:
从文档的内容来看,我希望父母和孩子共享相同的变量,特别是当从一个对象中进行 fork() 时,我希望对对象的引用在两者中都是相同的过程。但上面的例子表明他们不是。
有趣的是,这里没有发生克隆,看起来对象只是被复制了。如果我添加一个__clone()
函数,我可以看到它在分叉期间没有被调用。
两个进程不共享变量/对象的任何原因,或者对主题人员的任何良好阅读?
php - 如何在不等待第一个响应的情况下同时调用两个 api?
我正在制作一个搜索小部件。当我搜索时,我从 2 个 api 中获取结果,一个来自 yelp,另一个来自另一个来源。但这个过程需要更长的时间
有什么方法可以将这两个 api 一起调用吗?我不希望在第一个 api 给出结果后调用 yelp api。我想同时给他们两个打电话。
有没有办法做到这一点?
php - 使用 PHP 进行进程分叉
我已经复制了下面的代码并运行它总是显示的代码
父母
作为输出。但是源文件说它将显示输出为
孩子
父母
.请告诉我“如何在 PHP 中实现线程”。
注意:在 cli 中运行时出现错误
PHP 警告:模块 'pcntl' 已加载到第 0 行的未知中
来源:http ://www.electrictoolbox.com/article/php/process-forking/