草庐IT

多进程架构

全部标签

c++ - 从 Windows 服务启动子进程

我在c++中有一个XMLRPC窗口服务。我需要从它启动子进程,如果Windows服务收到请求并且进程已经存在我需要结束那个特定的子进程并再次启动它。我不需要等待进程在启动后退出但是一旦它启动并开始它应该做的事情我需要通知主进程。当子进程结束时,它需要通知启动它的服务,以便我可以维护一个已存在进程的列表。我知道我可以用CreateProcess做到这一点但是,一旦子进程到达特定事物,我该如何处理通知的各个方面。 最佳答案 调用CreateProcess后,跟踪进程句柄。您可以使用它来查看进程是否有exitedornot,并调用Term

c++ - 如何保证在进程退出或在c++中被杀死时执行某些代码?

谁能告诉我如何确保程序中的某些代码在进程退出或被杀死时得到执行?驱逐舰只有在正常退出时才会被调用。但我希望我的代码在被系统关闭或任务管理器杀死时得到执行。平台是Windows,如果需要,我不介意使用特定于平台的代码。 最佳答案 你不能。如果用户拔掉电源线怎么办? 关于c++-如何保证在进程退出或在c++中被杀死时执行某些代码?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/219

windows - 监控您自己进程中的内存使用情况

让我们暂时搁置海森堡。我将如何从我自己的进程中监控该进程使用了​​多少内存?(我可能故意低估了问题,梦想有创意的答案......) 最佳答案 Quassnoi是正确的-但它也可能值得检查我们的这个问题:HowtodetermineCPUandmemoryconsumptionfrominsideaprocess其中包括代码示例 关于windows-监控您自己进程中的内存使用情况,我们在StackOverflow上找到一个类似的问题: https://stack

c++ - 通过检测文件打开(创建)进行进程同步

有两个应用程序。第一个应用程序对有问题的机器是远程的(我无权访问它)并通过网络(LAN)创建一个大文件。我无法控制此过程,也不知道它何时发生。这就是我必须与之合作的。我无法以任何方式添加、更改或改变它。第二个应用程序是我写的,找到这个文件就处理它。此应用计划每5分钟运行一次。当我的应用程序尝试处理文件时,可能会出现文件正在写入的情况,导致处理不完整和/或其他错误,因此我需要在开始之前检测文件是否已完全写入处理它。我可以使用OpenFile()并请求读/写锁定访问。错误将指示正在创建文件。我可以用文件系统观察器做一些聪明的事情http://msdn.microsoft.com/en-us

windows - 在 Windows 下故意使外部进程崩溃

我想合成一个本地代码错误。这样一来,我们就可以看到发生这种情况时,特别是将某些调试输出放在哪里。Pskill(来自Sys-Internals)导致正常退出。Microsoft似乎不再直接提供DotCrash.exe。有什么方法可以从外部导致进程崩溃? 最佳答案 我在使用windbg之前通过以下方式完成了此操作:开始流程使用windbg附加到进程在我的应用程序的一个函数上设置断点运行应用程序直到遇到断点在windbg中,将局部变量设置为会导致访问冲突的内容(例如,将指针设置为0xFFFFFFFF或破坏寄存器值)按F5,应用程序应该会崩

c++ - 从另一个进程中获取内存

在Windows中,假设我使用DLL注入(inject)进入另一个进程。我还对我注入(inject)的进程的内存进行了一些截屏,并知道我想要提取的数据的位置。假设在0xaaaaaaaa处的另一个进程中有包含特定值的数据。我如何从那个过程中获取这个值,以便我可以在我的注入(inject)应用程序中使用它?既然我被注入(inject)到进程中,我可以只使用像memcpy这样的东西吗?memcpy(value,0xaaaaaaaa,10);我假设它可能比这更复杂?编辑:对于下面的回复,我看不出WM_COPYDATA对我有何帮助,因为它用于将数据发送到另一个应用程序,而不是用于从现有应用程序检

c - 当进程被终止时,有没有办法让线程从无限信号量等待中出来?

操作系统:Windows。语言:C我有一个线程通过TCP向服务器发送请求并在信号量上无限等待响应。还有另一个线程读取套接字,将接收到的数据复制到一个公共(public)缓冲区中,并使信号量发出脉冲以结束等待。这一切都很好。但在进程由于某种原因被终止的情况下,等待信号量的线程会一直等待,而其他线程将终止。为什么当进程被杀死时线程等待信号量没有结束?我在Linux论坛上读到有SEM_UNDO可以帮助解决这种情况。Windows上有类似的东西吗?任何解决方法? 最佳答案 Semaphoresdonothaveowners.如果您等待信号量

c++ - Windows中给进程分配内存时,是否总是会触发页面错误?

我正试图在操作系统级别深入了解Windows内存管理的内部机制。难道在分配内存时,总是在幕后触发页面错误吗?这是否意味着停止软页面错误的唯一方法是停止在进程内分配新内存?定义我将“内存分配”定义为任何形式的malloc,即new、LocalAlloc、VirtualAlloc、HeapAlloc等。我将“页面错误”定义为将内存从操作系统池映射到进程工作集的过程,该操作在高端Xeon上持续花费250us。 最佳答案 你需要非常清楚这里发生的不同事情。该进程有两个独立的部分,提交内存和将内存分页到进程中。这些都与调用malloc、Hea

c++ - 如何捕获来自另一个进程的退出消息?

我想“监听”其他一些应用程序并决定在它终止时做什么。如何?编辑:这两个程序在同一台计算机上运行,​​我想知道何时关闭另一个程序。然后在另一个程序中执行操作。我无法修改其他程序代码。我可能会也可能不会从应用程序A启动应用程序B。我可以通过其到exe的完整路径来识别应用程序B。 最佳答案 正如Abyx所写,WaitForSingleObject(或者可能是WaitForMulipleObjects)是您需要的API函数。创建事件启动一个(工作)线程将事件句柄传递给线程->HANDLE1获取要监视的进程的句柄。参见HowcanIgetap

c++ - 如何检测隐藏进程

想知道“ProcessExplorer”或“ComboFix”等应用程序如何检测隐藏进程???我假设这必须用C或C++完成。即使在.NET中也很容易访问进程列表,但这并不总是准确的,我知道根工具包可以从任务管理器中隐藏自己。是通过内存访问和IO吗?好奇是否有人知道这是如何实现的。 最佳答案 这个问题无法回答。这取决于该过程最初是如何隐藏的。例如,有人可以通过向HookEnumProcesses、Process32Next等的所有进程以及与进程枚举相关的所有其他API注入(inject)用户模式​​DLL来隐藏进程。这将被跳过钩子(H