问题标签 [proc-open]

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 投票
1 回答
1191 浏览

php - PHP proc_open bash vs dash

Consider this sample script:

When /bin/sh is symlinked to /bin/dash (the Debian default), cat gets executed in a shell:

When /bin/sh is linked to /bin/bash however, cat is a direct child of php:

This is very annoying inconsistency that makes it impossible to reliably send signals to the spawned process (as the signal is sometimes received by a shell).

Why is proc_open behaving differently depending on where /bin/sh points to? Is there a way to not run a shell, even if /bin/sh is not bash?

0 投票
1 回答
448 浏览

php - 向 proc_open() 打开的进程发送信号

我们这里有一个实用程序,proc_open()用于调用 ssh 在远程机器上运行命令。但是,在某些情况下,我们需要暂停远程机器上的命令,但proc_close()不要proc_terminate()将所需的信号发送到 ssh 连接的远端。SSH 通常会SIGHUP在它终止时向正在运行的程序发出一个,但我们需要向SIGINTssh 发送一个,它会将它转发给在远程端运行的程序。

我已经尽可能多地搜索了,似乎有许多pcntl用于接收信号的函数,但我无法找到任何关于通过 PHP发送信号的内容,更不用说与proc_*函数相关的任何内容了。

0 投票
1 回答
403 浏览

php - 在 php 中为 pdf2htmlex 解析标准错误

我有以下 php 代码:

当 $cmd 设置为“ping 127.0.0.1”时,此代码可以正常工作,并实时提供 php 输出:

但是 pdf2htmlEX 命令,即 $cmd = "pdf2htmlEX --zoom 1.3 --override-fstype 1 --hdpi 720 --dest-dir test test/test_data/Harsh_Singh_191_Marketing_IM18.pdf" 不起作用。它确实转换文件并在目录中提供输出,但网页上没有任何内容。我怎样才能让它工作?

0 投票
1 回答
792 浏览

php - 使用 proc_open 进行多流选择接收来自慢速进程的响应

我使用 proc_open 从 WP 插件调用一个慢速 Python 脚本作为子进程(回声混音代码),以及在这个问题上找到的一些代码的变体。

(python)脚本需要大约一分钟来处理(一堆音频),我希望找到一种方法来将输出显示到浏览器,因为它是从 python 脚本打印的。就目前而言,我的整个函数的输出在 proc_open 和 stream_select 进程结束之前不会显示。这甚至包括在函数开头的 echo 语句。

是否可以使用对 stream_select 的多次调用来回显子进程输出?

显然,我是套接字编程的新手,并期待从 SO 社区获得更多见解。

0 投票
1 回答
172 浏览

php - 通过 PHP 与外部程序进行交互

我想说这是一个非常简单的问题,但我坚持下去:

我需要与使用一些调试选项运行的外部程序(特别是 Exim)进行通信。当我从 linux shell 运行它时,它是这样的:运行exim -bh 11.22.33.44,然后读取它的输出(STDOUT 和 STDERR),从 SMTP 对话框中输入某行,然后再次读取 Exim 输出,输入另一个 SMTP 行等等。它在我使用 bash shell 时运行良好,但是当我从 PHP 脚本运行它时,它卡在了 STDIN 读取循环中。

我使用proc-open

看起来很简单,但在第一个 STDERR 结束时,它卡住了。

尝试了阻塞和解除阻塞模式,尝试从 STDERR 和 STDIN 交换读取 - 到目前为止没有运气。

请指出正确的方法!

0 投票
0 回答
412 浏览

php - 为什么我们需要为工人使用 proc_open?

下面是一个例子的代码PHP worker。网络上的所有示例都使用 proc_open() 并打开子进程来完成工作。

Worker.php 与子进程


但是使用 php register 错误处理程序,我们可以捕获 php worker 错误,然后我们可以将失败的作业写入数据库。

我的问题是如果我们使用 supervisord 为什么我们需要打开子进程?

例子

Worker.php 没有子进程

使用主管

启动所有工人

然后开始进程

主管

那么为什么我们需要使用 proc_open() 函数呢?

0 投票
1 回答
686 浏览

php - PHP proc_open & exec 超时但 cli 工作正常

我目前使用的是 Symfony Process 组件,它依赖于proc_openPHP 的功能。我需要启动一个命令wkhtmltopdf,它具有以下形式:

当我直接在我的 shell 上运行这个命令时,它工作得很好,大约需要 6 秒才能执行。但是,当我将 PHP 与 Process Component 一起使用时,它会超时……而当使用execorproc_open函数时,它会无限期地运行。Process Component 的默认超时时间是 60 秒(即使延长它也没有任何效果)。

我在 PHP 5.4 和 PHP 5.5 上试过这个,但结果似乎是一样的。

任何想法为什么这个命令在 shell 上运行得很好但不能通过 PHP 运行?在 MAMP 而不是 MAMP 环境中测试(在 5.4 和 5.5 版本上)。它可以在带有 PHP 5.5 的 Ubuntu 14.04 上运行。

我想也许,当通过 PHP 和 MAMP 时,这个过程可以完成,但仍然像这个 bug所报告的那样挂起?当我有更多信息时,我会更新,看看是否确实生成了 PDF。

谢谢。

0 投票
1 回答
889 浏览

php - php中终端的实时更新(popen或proc_open)

目标: 从终端获取实时更新而无需换行。目前我正在使用这个

此代码的输出

它在下载结束时只输出一次(起初它只在我不知道为什么会发生这种情况时才给我实时更新)。但是在我的 Windows 命令提示符中,我在一行中获得了百分比和速度,而没有换行符。为此,我尝试了此代码

失败了......结果就像是空的

输出

那么任何人都可以提供任何建议来修改这些代码或新代码吗?谢谢。

0 投票
1 回答
50 浏览

php - 发现一个复杂的 PHP 错误

我们目前有一个使用 Plesk 在专用 CentOS 服务器上抓取网络的应用程序。该应用程序使用proc_openand exec,它通常可以工作,但最终会失败。错误日志有时会显示 2 个有趣的错误:Unable to fork随后是一系列管道错误 - 其他时候什么也没有。

就像我之前提到的,问题是应用程序在爬了几个小时/天后突然随机停止,并且通常在 PHP 错误日志中甚至没有正确的调试/分析信息。

是否有任何应用程序、软件、套装、方法或任何其他类型的解决方案来监视服务器资源和错误,并全面了解导致应用程序停止的可能发生的情况?

0 投票
1 回答
482 浏览

php - 只要创建了 png,就让 PHP proc_open() 读取 PhantomJS 流

我有一个 PHP 脚本,它依赖shell_exec()并且(因此)99% 的时间都在工作。该脚本执行了一个生成图像文件的 PhantomJS 脚本。然后使用更多的 PHP 以某种方式处理该图像文件。问题是有时shell_exec()会挂起并导致可用性问题。阅读此 https://github.com/ariya/phantomjs/issues/11463 我了解到这shell_exec()是问题所在,切换到proc_open将解决挂起问题。

问题是shell_exec()等待执行的命令完成时proc_open不会,因此跟随它并在生成的图像上工作的 PHP 命令会失败,因为图像仍在生成中。我在 Windows 上工作,所以pcntl_waitpid不是一个选择。

我正在尝试做的是不断地让 PhantomJS 输出一些东西(任何东西),以便proc_open通过它的标准输入管道读取,这样我就可以在目标图像文件准备好后立即开始工作的图像处理 PHP 函数。

这是我的 phantomJS 脚本:

还有我的 PHP 代码:

生成了 test.png,但我没有得到一个$return_message. 我究竟做错了什么?