草庐IT

多进程架构

全部标签

c++ - 如何使进程 B 仅在进程 A 处于事件状态时运行

我有一个启动另一个进程B的进程A。当前,进程B在退出之前等待由进程“A”发出的信号(WaitForSingleObject),一旦设置了信号,进程B就会退出。但是,当进程A意外终止或崩溃时,我最终进程B仍在运行。我怎样才能让B无限期地等待信号,除非进程A崩溃了?换句话说..进程B应该只在进程A运行之前保持事件状态。谢谢 最佳答案 WaitForSingleObject在进程A的进程句柄上;它会在A死亡时发出信号。另一种方法是将B作为调试器附加到A。然后您将在进程退出时收到一个事件,并且可以完美同步退出。

windows - 从 shell 或脚本设置 Windows 进程权限

我很幸运我的机器上有一些默认情况下我无法终止的进程-任务管理器声称“访问被拒绝”。因为我有管理员访问权限,所以我可以在ProcessExplorer中终止这些进程通过修改他们的权限并在尝试杀死他们之前授予管理员组“完全控制”。我想在脚本中自动执行此操作,最好是在标准CMD中,必要时使用PowerShell或.NET脚本。谁能指出我进行必要的调用? 最佳答案 添加了npocmaka的评论作为答案。使用以下语句以管理员身份终止进程:runas/user:Administratortaskkill/improcessName*/f

c++ - 如何复制当前进程?

复制当前进程以在Windows中生成另一个实例的最简单方法是什么?我知道Linux有fork(),但我只需要在同一进程中再次运行main,可能使用带有正确参数的CreateProcess()。 最佳答案 正如@DavidHeffernan评论的那样:STARTUPINFOsi;::memset(&si,0,sizeof(si));si.cb=sizeof(si);PROCESS_INFORMATIONpi;::CreateProcess(NULL,::GetCommandLine(),NULL,NULL,FALSE,0,NULL,N

c++ - 列出 Windows 进程和模块

所以我最近一直在研究WindowsAPI,并且遇到了一个问题,我需要一些帮助。其实准确的说是两个问题。我将首先展示代码,然后解释我遇到的困难:#pragmaonce#pragmacomment(lib,"Psapi.lib")#include#include#include#include#includevoidProcessError(DWORDerror);intmain(){FILE*file=fopen("C:\\Users\\Administrator\\Desktop\\processes.txt","w");DWORDcount,i,modulesCount;WCHARb

Python:当 KeyboardInterrupt 被转发到多处理子进程时?

我在Windows上执行了以下测试代码:importmultiprocessingimporttimedefchild():whileTrue:time.sleep(2)if__name__=='__main__':multiprocessing.Process(target=child).start()whileTrue:time.sleep(1)如果我在它工作时按Ctrl-C,我会看到两个KeyboardInterrupt异常-一个用于sleep(1)和一个用于sleep(2)。主process中的键盘中断是如何转发给子process的?它们毕竟是进程,而不是线程:(。

c# - 以系统用户身份启动进程

我试图在Windows上使用代码(c#)从一些注册表项中读取一些值,我发现我无法读取这些值的原因是因为管理员用户没有权限:所以我手动导航到给我带来麻烦的注册表项,这就是权限选项卡的样子:所以这让我想到了如何以用户“系统”的身份运行进程?这听起来很奇怪,但显然有一个系统用户对吗?我知道如何以管理员身份运行,但也许也可以以系统身份运行。编辑这是我的代码。基本上我想遍历所有注册表项:classProgram{//classtostoreregkey.[Serializable][DebuggerDisplay("Name={Name},Val={value},type={type}")]cl

python - 如何防止其他进程随意更改文件夹?

如何防止其他进程随意更改文件夹?我是这样做的:importosusername=os.environ.get("USERNAME")os.system(r"echoy|caclsMyFolder/T/P%s:R>NUL"%username)#readonlyos.system(r"echoy|caclsMyFolder/T/P%s:F>NUL"%username)#fullaccess这样做的缺点是什么?什么是最好的方法? 最佳答案 在一般情况下,您不能这样做。最好将文件系统视为一个多线程对象,您无法对其进行同步。(http://b

c# - 模拟后回退到子进程的默认用户

我的应用程序通常由用户A作为用户B使用System.Process.Start("app.exe","UserB","secret")启动。现在,我希望app.exe产生额外的子进程,但作为UserA,没有UserB拥有的额外权限。有没有办法在不询问UserA密码的情况下完成此操作?我试过在没有凭据的情况下使用System.Process.Start以及调用cmd/Cchild.exe,但这两种方法都以UserB身份启动child.exe。我正在考虑一种方法让当前shell为我启动子进程,但我还没有找到。 最佳答案 最简单的解决方案

windows - 当一个进程被 "START"命令调用并被TASKKILL杀死时的退出代码

假设我有一个脚本parent.pl使用system和start命令调用另一个脚本child.pl,像这样:#parent.plsystem("START\"CHILD\"/WAITperlchild.pl");print"$?\n";Child.pl正在运行一个需要很长时间的操作:#child.plwhile(1){}现在我使用TASKKILL来终止child.pl。TASKKILL/FI"WINDOWTITLEeqCHILD"令人惊讶的是,parent.pl打印的退出代码是0。但是,如果我只是在parent.pl中调用child.pl而不是使用START命令,退出代码将是256.#p

c++ - boost::interprocess 共享内存在 32 和 64 位进程之间

我正在尝试让boost::interprocess在32位和64位进程之间共享内存。Thisbugtrackerentry这表明这在我使用的Boost1.49中是可能的。作为测试,我尝试共享一个无符号整数。这是一个带有两个按钮的简单Qt应用程序。#defineSHARED_MEMORY_NAME"Mysharedmemory"#defineSHARED_VAR_NAME"testVar"namespacebip=boost::interprocess;voidon_createMemButton_clicked(){std::cout(SHARED_VAR_NAME)(42);std: