问题标签 [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 投票
3 回答
1784 浏览

php - 在父进程中杀死僵尸子进程

所以我想做以下事情:
设置一个分叉一堆进程的守护进程。

所以守护进程分叉了一堆进程,然后再分叉了另外一堆进程

问题是子进程可能需要很长时间才能退出。如果父进程尽管分叉子进程还有其他工作要做,我如何防止僵尸子进程?

父进程(守护进程)执行以下操作:

问题是如果父进程除了分叉子进程之外还必须做其他工作并且子进程需要很长时间才能退出,我该如何等待子进程退出。

我正在使用系统守护进程 PEAR 函数来创建守护进程,并使用pcntl_fork函数来创建进程。

0 投票
1 回答
1301 浏览

php - 使用 pcntl_fork 子进程无法访问从父进程创建的 CodeIgniter 实例

我正在尝试使用代码点火器库编写一个守护进程,问题是当我派生守护进程时,它无法再访问 CI 实例,并且在 __construct 中初始化的所有库也无法访问,而且如果我创建一个新的子进程中的 CI 实例,我仍然无法访问任何库,并且出现以下错误:

错误 - 2012-02-27 00:13:07 --> 严重性:警告 --> 包含(application/errors/error_general.php):无法打开流:没有这样的文件或目录 /srv/http/FreeFileConvert/system /core/Exceptions.php 146 错误 - 2012-02-27 00:13:07 --> 严重性:警告 --> include(): 未能打开 'application/errors/error_general.php' 以包含 (include_path='. :/usr/share/pear') /srv/http/FreeFileConvert/system/core/Exceptions.php 146

这是我的代码:

函数“add_to_queue()”工作正常,但问题在于“start_worker”,它在分叉后停止工作,我什至无法访问日志帮助函数,这就是我在代码中使用 error_log() 的原因。

如果有人能提供帮助,我将不胜感激。

0 投票
3 回答
5029 浏览

windows - Windows 中的 PHP CLI:处理 Ctrl-C 命令?

如何在命令行中处理 PHP 中的CTRL+ ?功能在 Windows 中不起作用。CPcntl_*

0 投票
1 回答
1251 浏览

php - 随后的 pcntl_signal 信号未启动处理程序

Lemme 首先给出我所拥有的代码的基本描述。我从一个主要的父进程开始(注意:为简单起见,我没有显示所有功能。如果您需要我随时扩展,请告诉我):

这是正在发生的事情:

  1. 我启动我的脚本并正确获取进程(例如 Parentpid:2,childpid:3)
  2. 然后我向父母发送一个 SIGHUP 信号,它会正确终止并启动一个新的子进程(例如 Parentpid:2,childpid:4)
  3. 然后我向父级发送第二个 SIGHUP 信号,它会正确尝试并添加一个新的子进程,但它拒绝杀死第二个子进程。(例如 Parentpid:2、undyingchildpid:4、newchildpid:5)

让我知道这是否需要更多细节/没有意义。我不明白为什么第一次它会正确地杀死孩子,但第二次却没有。

更奇怪的部分是,当我更改它以便更改我的重新启动处理程序以使其不断尝试使用 SIGINT 杀死孩子时,它每次都会失败,但是当我向它发送 SIGKILL 命令时,它会杀死子进程:

我需要孩子能够被 SIGINT 杀死才能正确处理它。我不想只是 SIGKILL 它。是否有任何理由说明为什么第二次围绕 SIGINT 不起作用,但 SIGKILL 会?

0 投票
1 回答
4091 浏览

php - 即使在编译后也没有在 php 中启用 PNCTL

我刚刚用 --enable-pcntl 编译了我的 PHP,但是当我尝试访问 PHP 中的过程控制函数时,我得到:

我错过了什么吗?我的 apache 没有用 prefork 编译。这是工作所必需的吗?

完整的 PHP 编译标志:

阿帕奇模块:

编辑: 也许我不够清楚。我不会使用来自 Web 服务器的 pcntl 函数。我想重申,我的 pcntl 函数也没有在命令行中工作。对此有任何想法吗?

0 投票
2 回答
1449 浏览

php - pcntl_wait 未被 SIGTERM 中断

根据pcntl_wait的 PHP 文档,

等待函数暂停当前进程的执行,直到一个子进程退出,或者直到一个信号被传递,其动作是终止当前进程或调用一个信号处理函数。

但是,当我运行以下代码并将 SIGTERM 发送到父进程时,仅在子进程退出后才kill -s SIGTERM [pid]调用信号处理程序(即我必须等待睡眠完成。不应该被 SIGTERM 中断吗?pcntl_wait()

fork_test.php:

输出(SIGTERM 仅在等待 30 秒后出现):

PHP 版本 => 5.3.3

0 投票
1 回答
4981 浏览

php - 如何中断执行并杀死子进程

我正在尝试在 PHP CLI 脚本中调用一个长时间运行的 shell 命令exec()。但我无法终生弄清楚如何中断 PHP 脚本并杀死生成的子进程。好像我一打电话exec(),我的信号处理程序就被忽略了。以下代码按我的预期工作;如果我向进程发送 SIGTERM,它会SIGTERM立即回显并退出。

但是,如果我替换sleep(60);exec('sleep 60');,则在睡眠结束之前我不会到达我的信号处理程序。我有两个问题:

  1. 如何获得信号以使用exec(或shell_execproc_open)?
  2. 捕获信号后,如何杀死由 产生的任何子进程exec
0 投票
1 回答
199 浏览

php - 基于 Zend Framework 中的现有连接创建新的数据库连接

我有一个使用 Zend 框架并派生出一个子进程的 CLI 脚本。当我从 CLI 启动它时它运行良好,但是当我从 bash 脚本启动它时,当 bash 脚本结束时,db 连接关闭。

我想我需要给孩子一个新的数据库连接到同一个数据库。不幸的是,最初创建连接的方式对我来说太神秘了,所以我想在现有的基础上创建新的连接。我怎样才能做到这一点?

这是它在 Bootstrap 中的创建方式以及我以后如何访问它:

这就是我想使用新连接的地方:

0 投票
1 回答
24423 浏览

php - pcntl_fork 在 PHP 中是如何工作的?

我对pcntl_forkPHP 感到困惑。

我认为它执行多线程,但它是如何工作的,我将如何在脚本中使用它?

0 投票
2 回答
477 浏览

php - PHP PCNTL - 在终端中保持控制

我想运行并行进程来同时处理至少 4 个用户。

输出是这样的:

当前发生的情况是在显示parent14 次后,对脚本的控制丢失,并启动了一个新的空命令行。再等 5 秒后,剩余的输出来了。

我怎样才能避免这种情况发生。我希望能够在我想要的时候打破脚本。

编辑

如果我通过终端发送信号,比如说按 CTRL+C,脚本不会停止,需要一种方法来通知脚本在那一刻停止。