问题标签 [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.

0 投票
0 回答
69 浏览

php - PCNTL 安装程序

我是 PHP 和 Socket 编程的新手,我有一个关于套接字的示例脚本,当我运行它时,这是一个令人毛骨悚然的错误并要求安装 PCNTL 扩展,但我不确定是否可以将其安装/添加到我的服务器我在 Windows 中使用 XAMPP,可以有人帮助我吗?

0 投票
0 回答
258 浏览

php - PHP:在 5 个并行任务之间分配工作

我使用外部 API 来收集对象的数据。外部 API 的结构方式是,我必须对 API 的不同部分进行 5 次单独调用,以获取所需的所有数据。

到目前为止,我一直在按顺序执行此操作,但是每次迭代大约需要 5 秒,在处理多个对象时需要等待很长时间。

我想做的是将 5 个任务分叉到不同的进程中,让它们每个都联系 API,然后用它们的数据集部分更新一个数组。

我正在查看 pcntl_* 函数来执行此操作,但是我不确定有效执行此操作的最佳实践是什么。

基本上,验证对象数据是否存在于远程系统中,我希望并行调用五个函数。Func1 - func5,每个都传递了对象的 ID,我想通过某种方式来指示进程需要执行的 5 个操作中的哪一个。

procs 被调度并且父进程等待直到所有五个返回,并将它们的结果添加到全局数组中。

此时,父母将数组发回给请求者并死亡。在伪代码中,我认为处理分叉的函数会像这样工作:

第二个参数将是某种指示孩子需要执行哪个功能的指标,我认为这只是文件中的 4 个其他功能。

pcntl_* 是最好的方法吗?这会是代码的最佳结构吗?需要哪些实际的 pcntl_* 调用?

谢谢。

0 投票
1 回答
104 浏览

php - 是否可以使用 PCNTL 设置子进程的进程组?

pcntl_waitpid()的手册页记录了以下选项:

等待任何进程组 ID 等于 pid 绝对值的子进程。

我对此功能感兴趣(等待一些子进程,但不是全部),但找不到有关如何设置子进程的进程组 ID 的任何参考。

这对PCNTL有可能吗?

0 投票
1 回答
320 浏览

php - 分叉 PHP 应用程序中的单一数据库连接

我的应用程序使用 pcntl_fork 派生一个监视连接路由器的子进程。因此,我实例化了 ConnectionManager 类,它将自己分叉成尽可能多的子进程,因为机器需要被监控。

我正在使用一个应该实现单例模式的外部数据库类,但 PHP 倾向于为每个分叉的子进程建立一个新的数据库连接。

随着受监控路由器数量的增加,问题就出现了。目前我们正在监控大约 56 台机器,因此应用程序建立了 56 个唯一的 mysql_connections 到底层数据库。但是如果监控的机器数量增加,我们的方法将与 mysql_connection_limit 发生冲突。

数据库用于存储每个路由器的流量。此外,每个子进程都存储运行时数据,其中包含例如最后一次检索的交通数据或允许运行。

我的问题是,是否可以只使用一个连接。类似于缓存的东西,它收集 SQL 语句并将它们作为查询发送到数据库。

但是我该如何设计一种如上所述的方法呢?

如果需要更多信息,请询问,我会发布一些片段。

0 投票
1 回答
162 浏览

php - 如何在php中从父级启动终止的子进程

我正在尝试从父进程正常终止或由于错误而从父进程启动子进程。使用 pcntl_waitpid,可以从子进程获取状态。通过该状态,我想再次重新启动相同的脚本或进程。这是一个例子。

怎么可能?提前致谢。

0 投票
1 回答
245 浏览

php - 从分叉的孩子那里获取数据

我在 PHP 中玩pcntl_fork() 。

我参加了第二条评论中写的课程,并尝试向它发送数据 - 这似乎工作正常。

现在我对该数据进行了一些处理,并希望在我的父进程中收到一些结果。

有谁知道如何做到这一点?我能想到的唯一方法是将信息存储在数据库和/或其他存储中。

0 投票
1 回答
1547 浏览

php - 如何通过 apache 执行 pcntl 函数

我正在使用 php 的 pcntl_fork(),我注意到从 CLI 执行我得到了正确的结果,但是当我从 apache 执行它时,它给了我异常'未定义的函数 pcntl_fork()'

是的,我读到通过 apache 执行是不够安全的!

我的问题:

是否有任何解决方法可以让我通过 apache 执行具有 pcntl_fork() 实现的 php 脚本?

为什么首先通过 apache 执行分叉是不安全的,但从 CLI 执行却足够安全?

0 投票
1 回答
1157 浏览

php - cakephp/php 在后台运行函数

我以前从未这样做过,所以我需要一些输入。

代码(一般):

p>

“SomeComponent”包含几个功能。我需要在免费中启动一个特定的函数“SomeFunction()”,同时用户继续。
函数“SomeComponent::SomeFunction()”生成一堆 pdf,与数据库交互并使用 Cakephp 特定的方法'n'crap 来完成所有这些。用户通过数据库接收输出,所以我不需要从函数本身检索它。
所以我不清楚哪种方法可以做到这一点,哪种方法最好使用,以及每种方法的缺点是/可能是什么(特别是安全问题)。

我希望我以一种可以理解的方式解释了一切。如果你已经读到这里 - 谢谢。

0 投票
0 回答
884 浏览

php - PHPUnit 测试中的 pcntl_fork() 用法

我在 PHPUnit 中使用 pcntl_fork() 有一些问题。我正在执行这段代码

我得到以下信息:

但我期待这样的事情(我在没有使用 PHPUnit 的情况下运行测试时得到了它):

那么,这是 PHPUnit 的预期行为吗?有什么办法可以解决吗?

0 投票
1 回答
578 浏览

php - 分叉后父子没有捕捉到信号

我在使用 symfony 1.4 的 PHP 中遇到了一个奇怪的问题

我有一个启动多个工作人员的任务,有时,我需要停止所有工作人员(例如,在部署之后)。

我使用 start-stop-daemon 启动任务,我想通过向它发送信号 SIGINT 来停止它。

所以,这是我的代码:

我所做的非常简单:我 fork,创建 N 个子进程,然后在父进程中添加一个 pcntl_signal 来捕获 SIGINT 信号。signalHanlder 函数检索子 pid 列表并向它们发送它刚刚收到的相同信号(即 SIGINT)。

问题是当我向父进程发送一个 INT 信号(通过 kill)时,不会调用 signalHandler 函数。我不明白为什么!

奇怪的是,当我在 cli 中启动任务并使用 Ctrl-C 时,会调用 signalHandler 函数并停止所有子进程。

那么,你明白为什么会这样吗?难道我做错了什么?