问题标签 [external-process]
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.
python - 在 Python 中执行和监控外部程序的多个实例
主程序是这样的:
如何使主程序监视它启动的每个子进程实例,如果它没有运行,则使用相应的参数重新启动它。
保持子进程的多个实例运行而不是在主进程中实现多线程架构的目的是尽可能多地利用 CPU 和数据库吞吐量。
c++ - 确保在外部进程中创建文件时刷新文件(Win32)
关于将文件活动刷新到磁盘的 Windows Win32 C++ 问题。
我有一个外部应用程序(使用 CreateProcess 运行)来创建一些文件。即,当它返回时,它将创建一个包含一些内容的文件。
在继续之前,如何确保进程创建的文件确实刷新到磁盘?
我的意思不是 C++ 缓冲区,而是真正刷新磁盘(例如 FlushFileBuffers)。
请记住,我无权访问任何文件 HANDLE - 这当然隐藏在外部进程中。
我想我可以打开我自己的文件句柄,然后使用 FlushFileBuffers,但不清楚这是否可行(因为我的句柄实际上不包含任何需要刷新的东西)。
最后,我希望它在非管理员用户空间中运行,因此我不能在整个卷上使用 FlushFileBuffers。
有任何想法吗?
更新:为什么我认为这是一个问题?
我正在开发数据备份应用程序。本质上,它必须按照描述创建一些文件。然后它必须更新它的内部数据库(使用 SQLite 嵌入式数据库)。
我最近遇到了蓝屏期间发生的数据损坏问题(其原因与我的应用程序无关)。
我关心的是系统崩溃期间的应用程序完整性。是的,我确实关心这一点,因为这个应用程序是一个数据备份应用程序。
我关心的用例是这样的:
- 使用外部进程创建一个小数据文件。此写入在 OS 缓存中等待写入磁盘。
- 我更新数据库并提交。这是磁盘活动。此写入也在 OS 缓存中等待。
- 发生系统故障。
在我看来,我们现在处于潜在的竞争状态。如果“1”被刷新而“2”没有被刷新,那么我们很好(因为数据库事务没有被提交)。如果两者都没有被刷新或都被刷新,那么我们也可以。
据我了解,写入将是不确定的。即,我不知道操作系统会保证在“2”之前写“1”。(我错了吗?)
所以,如果“2”被刷新,但“1”没有被刷新,那么我们就有问题了。
我观察到数据库已正确更新,但文件中有垃圾:最后三分之二的数据是二进制“零”。现在,我不知道当您在蓝屏时刷新文件部分时会是什么样子,但如果它看起来像这样,我不会感到惊讶。
我可以保证这是原因吗?不,我不能保证这一点。我只是在猜测。可能只是由于磁盘故障或蓝屏导致文件“自然”损坏。
关于性能,这是我相信我可以处理的事情。
例如,SQLite 的默认行为是在每次提交事务时执行完整文件刷新(使用 FlushFileBuffers)。他们很清楚,如果您不这样做,那么在系统崩溃时,您的数据库可能已损坏。
另外,我相信我可以通过仅在“检查点”刷新来减轻性能影响。例如,写入 50 个文件,刷新批次,然后写入数据库。
这一切成为问题的可能性有多大?打败我。但是,我的应用程序很可能会在系统故障时或前后存档,因此您可能更可能认为。
希望这能解释为什么我不想这样做。
mips - 读取 MIPS 外部文件以便另一个文件可以使用它?
大家好,我正在为我的 MIPS 项目做最后的事情,而且看起来很简单。我需要获取一个过程(称为提要)并通过读取它让其主驱动程序使用它。我知道我应该使用调用代码 14 和 .globl sym (我认为)以便将其输入文件并让它读取它。我只需要一个基本教程或其他东西,因为我在 Internet 或我的书中找不到它(只是列出了调用代码,真的很有帮助)。这是我所知道的:
我需要使用读取,但我还需要一个文件描述符(不知道从哪里得到它)。我需要将缓冲区放在 $a1 中,将长度放在 $a2 中。
嗯,就是这样。如果有任何像样的教程,你可以掀起,或者如果有一个我看不到的在线教程,请告诉我:)。我只需要朝着正确的方向推动,我相信这不会太难,只是找不到任何信息!
vb.net - 从 vb.net 关闭模式弹出窗口?
我想等待并关闭另一个应用程序的模态表单(弹出窗口),一旦它出现。我想从 VB.NET 执行此操作,但 C# 中的建议应该很容易翻译。
我可以在我的应用程序中对模态弹出窗口的标题进行硬编码,因为它又长又独特。我想要做的是模拟用户单击表单上的关闭(“X”)按钮,或者单击表单的默认选项卡顺序 0 按钮。要么工作。
也许除了标题栏的标题之外,我还需要有关模式弹出窗口的更多信息?在任何情况下,将其用作该模态表单的唯一标识符是安全的。我还希望该代码在关闭弹出窗口的第一个事件发生后立即终止检查。
我相信这是微不足道的,但我找不到任何现成的信息。微软说我不应该发送WM_CLOSE
到模式弹出窗口,因为它会调用DestroyWindow()而不是EndDialog(),但老实说,我什至不知道“发送WM_CLOSE
”到“窗口”是什么意思 =/
感谢您分享一点大师精神!:D
PS:这在 AutoHotkey 中可能是微不足道的。不知道我觉得很蹩脚,我知道我需要它。
perl - 如何在 Perl 中从 DOS 获取目录列表?
我需要从传递给 Perl 脚本的路径中获取目录名称作为运行时参数。这是我正在使用的代码:
但它仍会返回运行此 Perl 脚本的目录中的目录名称。简而言之,如何从路径传递给此 Perl 脚本的目标目录中获取目录名称?
php - 通过传递一个数组执行外部命令,文件名中有空格
我有一个 PHP 脚本,它需要执行将在名称中包含空格的文件上运行的程序。大多数用于执行外部命令(例如exec()
)的 PHP 函数采用 1 个字符串参数来执行命令行。但是,您必须做一些事情,例如escapeshellarg()
确保您的输入安全。
有没有办法在 PHP 中使用数组执行外部命令。所以而不是:
我可以去:
这意味着我不必担心逃避争论。我想避免使用escapeshellarg()
,因为我使用的版本有一个错误,它会去除非 ASCII 字符。
Java 有这个功能http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Runtime.html#exec%28java.lang.String[]%29
windows - eventmachine 和外部脚本通过反引号
我有一个使用 eventmachine 编写的小型 HTTP 服务器脚本,它需要调用外部脚本/命令,并通过反引号 ( ``
) 来实现。当提供不运行反引号代码的请求时,一切都很好,但是,只要我的 EM 代码执行任何反引号的外部脚本,它就会停止提供请求并停止执行。
我注意到 eventmachine 似乎对子进程和/或线程很敏感,并且似乎有用popen
于此目的的方法,但 EM 的消息来源警告说此方法在 Windows 下不起作用。很多运行这个脚本的机器都在运行 Windows,所以我不能使用popen
.
我在这里运气不好?是否有一种安全的方法可以从 Windows 下的 eventmachine 脚本运行外部命令?有什么办法可以在不阻止 EM 执行的情况下触发一些在外部运行的命令?
编辑:似乎把 EM 搞砸的罪魁祸首是我对 Windowsstart
命令的使用,如:start java myclass
. 我使用 start 的原因是因为我希望这些外部脚本开始运行并在提供 EM 请求后继续运行
perl - 如何从 Perl 将参数传递给外部进程?
我有一个应用程序可执行文件,它使用不同的参数运行以产生不同的输出。我想从脚本的命令行参数中为此提供一些参数,而其他参数将是脚本的本地参数。用法:
我对上面的代码做了一些固有的错误,但一直无法弄清楚:-(
java - 确保在 tomcat 被杀死时终止由 Runtime.exec 启动的应用程序
我通过调用启动几个外部进程
我使用一些 java.concurent.Future 监视应用程序的正确启动和执行。我可以判断应用程序是否启动、错误、停止。我可以阻止它。
但是,当我杀死主应用程序(启动其他应用程序的那个)时,子应用程序的几个进程继续运行,我失去了对它们的控制。
我正在寻找一种方法来确保当母应用程序停止/杀死/错误时,所有子进程也被杀死。
我已经做了什么:
主应用程序在 tomcat 中运行,所以我监听上下文的破坏,并杀死所有子进程。但这还不够:当 tomcat 被停止或杀死时,它就不起作用了。
java - 将管道应用程序的控制台文本捕获到另一个应用程序
如果标题很混乱,我很抱歉,但我想知道是否有可能获得一个应用程序的标准输出,该应用程序通过管道传输到 java 中的另一个应用程序。
这是命令行。
如果这是在 bash 中执行的,这就是输出。
最后一行由 sox 更新,直到用户发送 SIGINT。
问题是,在 java 中,来自该进程的 InputStream 不会产生任何数据。但是,如果我省略了 sox 的管道sox -d -t wav test.wav
,那么 InputStream 会获取数据。我的问题是,控制台出了什么问题?我怎样才能访问它。