问题标签 [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.
c++ - 如何确保 popen()ed 进程在退出时运行析构函数?
如果我有一个管道来运行某些命令,则管道命令需要进行一些清理,但是,如果启动管道的进程有错误,则管道命令不会清理。在这种情况下,管道命令是否获得 SIGPIPE?如何确保 cleanupPipe 析构函数始终运行?当 errorOccurred 异常被抛出时,我看到 cleanupPipe 析构函数没有运行。我设置了 SIGPIPE 处理程序以引发异常,因此如果 SIGPIPE 是结果,我希望我的析构函数在 SIGPIPE 导致抛出异常展开堆栈时运行。
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 中给出
c - Oracle beq 和 popen()
我有一个这样的程序(用于 Pro*C 预编译器):
当我使用 tcp/ip 连接到 oracle 时,它工作正常。但是当我使用 BEQ 时,pclose() 返回 -1 和 errno 10。有人可以指导我查看描述 BEQ 连接可能问题的文档吗?似乎在 oracle 的内部某处已经有 wait() 调用了……</p>
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 会导致错误。
以下是一些相关代码:
c++ - 强制关闭文件描述符以使 pclose() 不会阻塞的方法?
我正在使用 popen() 创建一个管道,并且该过程正在调用第三方工具,在极少数情况下我需要终止该工具。
如果我只是抛出一个异常并展开堆栈,我的展开尝试在我不再需要其结果的第三方进程上调用 pclose()。但是,pclose() 永远不会返回,因为它在 Centos 4 上使用以下堆栈跟踪阻塞:
有什么方法可以在调用 pclose() 之前强制调用成功,这样我就可以通过编程方式避免这种情况,即我的进程挂起等待 pclose() 成功,而它永远不会成功,因为我已经停止向popen()ed 进程并希望丢弃它的工作?
在尝试关闭它之前,我是否应该以某种方式将文件结尾写入 popen()ed 文件描述符?
请注意,第三方软件正在分叉自己。在 pclose() 挂起的地方,有四个进程,其中一个已失效:
c - 使用 popen() 打开的文件描述符上的 pclose() 返回 errno 10(无子进程)
我正在运行 linux,我尝试执行以下操作:
- 在当前目录上运行 ls(使用 popen)
- 将结果输出到缓冲区(使用管道描述符中的 fread)
- 关闭管道(使用 pclose)。
一切正常(缓冲区已正确填充 ls 结果),但是当我检查 pclose() 结果时,它返回 -1 并且 errno 设置为 10(无子进程)。不知道为什么会发生这种情况,但我不能忽略它(除非对为什么会发生这种情况有合理的解释)。
我的代码:
readFromPipeOrFile 的代码(写入缓冲区的函数):
提前致谢!编辑:ERR_RETURN 只是一个宏,它检查第一个参数的条件是否为真,如果是,则在第二个参数中打印字符串并返回 -1。
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,
c - 使用 fclose 来处理 popen 是一个严重的错误吗?
几个月前,我为 Linux 编写了一个 CGI 应用程序,用于popen()
读取命令的输出,然后我用fclose()
.
现在,我读到对于封闭管道是需要使用pclose()
.
手册说:
from 的返回值
popen()
在所有方面都是正常的标准 I/O 流,除了它必须用pclose()
而不是 . 关闭fclose(3)
。
我的代码是这样的:
我的问题是:
我的错误有安全问题吗?它程序目前正在生产中。在测试中它没有做任何问题。真的需要,pclose()
改用补丁fclose()
吗?注意:我只在程序中打开 PIPE 一次。
今天,在我当地的家中,我做了一些测试fclose()
并且pclose()
没有返回 EOF 指示失败。
c++ - 如何获取popen创建的processID?
我必须执行命令并像 cmd 一样返回结果。
我刚刚找到了满足这个要求的唯一方法。我使用popen函数执行命令并返回结果,然后使用pclose()函数关闭流和进程。
但是如果命令永远不会结束,例如“ping 8.8.8.8 –t”,我无法使用 pclose() 函数关闭进程。
如果我通过任务管理器杀死由 popen() 创建的子进程,则 pclose 函数可以正常工作。
如何获取 popen 创建的 processID 来杀死?
==================
并且:
如果我在 Windows 中使用 _popen(),我需要做什么才能获得 PID?
javascript - PHP - Windows 后台命令工作但仍在等待后台进程完成
我已经尝试过无数种方法来从另一个 php 脚本启动后台 php 脚本。我需要创建一个数据库文件的 zip 文件以供下载。我将其设置为立即下载单个文件,但如果需要压缩文件,我希望启动一个后台进程,该进程将通过电子邮件发送指向 zip 文件的链接。该过程有效,但原始脚本仍在等待该过程完成。我尝试了以下方法,就像我说的那样,它们有效,但它们不会进入后台。对于某些实例(大文件 zip),它让我等待了八分钟以上,没有用户会等待。
批处理文件
尝试的其他方法:
或者
或者
甚至尝试 JavaScript
或者
甚至 Ajax 也不会退居幕后!
请帮助我理解为什么该过程不会进入后台。先感谢您。