问题标签 [pclose]

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 回答
691 浏览

c++ - 如何确保 popen()ed 进程在退出时运行析构函数?

如果我有一个管道来运行某些命令,则管道命令需要进行一些清理,但是,如果启动管道的进程有错误,则管道命令不会清理。在这种情况下,管道命令是否获得 SIGPIPE?如何确保 cleanupPipe 析构函数始终运行?当 errorOccurred 异常被抛出时,我看到 cleanupPipe 析构函数没有运行。我设置了 SIGPIPE 处理程序以引发异常,因此如果 SIGPIPE 是结果,我希望我的析构函数在 SIGPIPE 导致抛出异常展开堆栈时运行。

0 投票
1 回答
7999 浏览

php - Windows/php pclose 和 popen 问题

这是我的代码:

我正在使用Windows机器。

我收到以下警告:

警告:popen(start /B php nightQueries.php 2011_08_12,r): 第 5 行 C:\inetpub\GTSA\runOvernight.php 中没有错误

和:

警告:pclose() 期望参数 1 是资源,布尔值在第 5 行的 C:\inetpub\GTSA\runOvernight.php 中给出

0 投票
1 回答
305 浏览

c - Oracle beq 和 popen()

我有一个这样的程序(用于 Pro*C 预编译器):

当我使用 tcp/ip 连接到 oracle 时,它​​工作正常。但是当我使用 BEQ 时,pclose() 返回 -1 和 errno 10。有人可以指导我查看描述 BEQ 连接可能问题的文档吗?似乎在 oracle 的内部某处已经有 wait() 调用了……</p>

0 投票
0 回答
424 浏览

signals - Linux 应用程序如何被大于 63 (WTERMSIG() > 63) 的信号数终止?

WTERMSIG() 如何计算出大于 63 的值,例如 67 或 123?

事情是这样发生的。我正在使用 popen() 运行 unbuffer ,而 unbuffer 又运行一个 shell 脚本。下一个代码块是一个 while() 循环,它从 popen() 返回的文件描述符中读取,直到它收到 NULL。紧随其后的是 pclose()。

在极少数情况下,pclose() 将返回一个值!= -1 并将 WIFSIGNALED() 设置为 true。奇怪的是,WTERMSIG() 然后计算出大于 63 的值,例如 67 或 123。这可能是什么原因?

shell 脚本正在完成它的所有任务,所以它不会在中途被打断。我可以理解 1-31(标准信号)或 32-63(扩展实时信号)。尝试在我们的平台 (Timesys Linux) 上生成信号 67 或 123 会导致错误。

以下是一些相关代码:

0 投票
3 回答
3310 浏览

c++ - 强制关闭文件描述符以使 pclose() 不会阻塞的方法?

我正在使用 popen() 创建一个管道,并且该过程正在调用第三方工具,在极少数情况下我需要终止该工具。

如果我只是抛出一个异常并展开堆栈,我的展开尝试在我不再需要其结果的第三方进程上调用 pclose()。但是,pclose() 永远不会返回,因为它在 Centos 4 上使用以下堆栈跟踪阻塞:

有什么方法可以在调用 pclose() 之前强制调用成功,这样我就可以通过编程方式避免这种情况,即我的进程挂起等待 pclose() 成功,而它永远不会成功,因为我已经停止向popen()ed 进程并希望丢弃它的工作?

在尝试关闭它之前,我是否应该以某种方式将文件结尾写入 popen()ed 文件描述符?

请注意,第三方软件正在分叉自己。在 pclose() 挂起的地方,有四个进程,其中一个已失效:

0 投票
2 回答
3628 浏览

c - 使用 popen() 打开的文件描述符上的 pclose() 返回 errno 10(无子进程)

我正在运行 linux,我尝试执行以下操作:

  1. 在当前目录上运行 ls(使用 popen)
  2. 将结果输出到缓冲区(使用管道描述符中的 fread)
  3. 关闭管道(使用 pclose)。

一切正常(缓冲区已正确填充 ls 结果),但是当我检查 pclose() 结果时,它返回 -1 并且 errno 设置为 10(无子进程)。不知道为什么会发生这种情况,但我不能忽略它(除非对为什么会发生这种情况有合理的解释)。

我的代码:

readFromPipeOrFile 的代码(写入缓冲区的函数):

提前致谢!编辑:ERR_RETURN 只是一个宏,它检查第一个参数的条件是否为真,如果是,则在第二个参数中打印字符串并返回 -1。

0 投票
1 回答
742 浏览

php - how to run php as background process

I have a problem when executing the PHP files as background process. I have two PHP file as follow :

index.php

cmdReadExcel.php

My goal is to run Report.readReport as background process. readReport function is function which reads Excel file and saves its rows to database.

I have followed the tutorial but there is no result/no rows inserted. Is there anything wrong in the code?

Regards,

0 投票
3 回答
4394 浏览

c - 使用 fclose 来处理 popen 是一个严重的错误吗?

几个月前,我为 Linux 编写了一个 CGI 应用程序,用于popen()读取命令的输出,然后我用fclose().

现在,我读到对于封闭管道是需要使用pclose().

手册说:

from 的返回值popen()在所有方面都是正常的标准 I/O 流,除了它必须用pclose()而不是 . 关闭fclose(3)

我的代码是这样的:

我的问题是:

我的错误有安全问题吗?它程序目前正在生产中。在测试中它没有做任何问题。真的需要,pclose()改用补丁fclose()吗?注意:我只在程序中打开 PIPE 一次。

今天,在我当地的家中,我做了一些测试fclose()并且pclose()没有返回 EOF 指示失败。

0 投票
3 回答
2195 浏览

c++ - 如何获取popen创建的processID?

我必须执行命令并像 cmd 一样返回结果。

我刚刚找到了满足这个要求的唯一方法。我使用popen函数执行命令并返回结果,然后使用pclose()函数关闭流和进程。

但是如果命令永远不会结束,例如“ping 8.8.8.8 –t”,我无法使用 pclose() 函数关闭进程。

如果我通过任务管理器杀死由 popen() 创建的子进程,则 pclose 函数可以正常工作。

如何获取 popen 创建的 processID 来杀死?

==================
并且:
如果我在 Windows 中使用 _popen(),我需要做什么才能获得 PID?

0 投票
1 回答
708 浏览

javascript - PHP - Windows 后台命令工作但仍在等待后台进程完成

我已经尝试过无数种方法来从另一个 php 脚本启动后台 php 脚本。我需要创建一个数据库文件的 zip 文件以供下载。我将其设置为立即下载单个文件,但如果需要压缩文件,我希望启动一个后台进程,该进程将通过电子邮件发送指向 zip 文件的链接。该过程有效,但原始脚本仍在等待该过程完成。我尝试了以下方法,就像我说的那样,它们有效,但它们不会进入后台。对于某些实例(大文件 zip),它让我等待了八分钟以上,没有用户会等待。

批处理文件

尝试的其他方法:

或者

或者

甚至尝试 JavaScript

或者

甚至 Ajax 也不会退居幕后!

请帮助我理解为什么该过程不会进入后台。先感谢您。