草庐IT

c# - 如何让进程在终止时发送通知

我想以编程方式确定进程何时终止。我在各种论坛中进行了搜索,发现了PsSetCreateProcessNotifyRoutine例程。此外,我遇到了一个类似的StackOverflow问题:.NETEventsforProcessexecutablestart.在接受的答案中,我看到了一个我可以使用的查询。但是,我无法完全理解查询。有人可以建议我实现解决方案的方法吗? 最佳答案 基本上,您需要连接到WindowsManagementAPI,它允许您监听启动和停止的进程。一旦WMI向您的程序发送通知,您将在(基于answer)中获得控制

windows - 防止任务管理器中的进程终止,反向

我使用下面的代码来防止用户从任务管理器中终止我的程序(我在某处找到它):functionPreventProcessKill:Integer;varhProcess:Thandle;EmptyDacl:TACL;pEmptyDacl:PACL;dwErr:DWORD;beginhProcess:=GetCurrentProcess();ZeroMemory(@EmptyDacl,SizeOF(tacl));pEmptyDacl:=@EmptyDacl;if(notInitializeAcl(EmptyDacl,sizeof(tACL),2))thendwErr:=GetLastErro

c - 策略在终止时刷新文件输出

我有一个监控高速通信链路并将日志写入文件(通过标准C文件IO)的应用程序。对到达链接的消息的响应时间很重要,因此我有意不在每条消息处fflush文件,因为这会减慢我的响应时间。然而,在某些情况下,我的应用程序会“暴力”终止(例如,通过终止进程),并且在这些情况下,最后几条日志消息不会被写入(即使通信链路已经安静了一段时间)。我可以使用哪些技术/策略来确保我的大部分数据都已刷新,同时又不影响响应速度?编辑:应用程序在Windows上运行 最佳答案 使用线程是对此的标准解决方案。让您的数据收集代码将数据写入线程安全队列,并使用信号量向写

windows - 在 Delphi 下终止应用程序时线程未终止

假设我有一个线程在应用程序终止时仍在运行(此线程无法终止,因为它等待Windowsapi调用返回这可能会很长......)如果应用程序关闭,线程会发生什么情况?它能引发异常吗(我在Delphi下)? 最佳答案 我会说异常(exception)是非常合理的。当您调用Application.Terminate时,这将导致以下事件序列:调用PostQuitMessage。Application.Terminated被设置为True。Application.Run返回。System.Halt被调用。运行退出过程,特别是DoneApplica

.net - 程序终止自身进程的正确方法是什么(Windows)

C#.NET3.5我有一个控制台应用程序正在被计算机上的另一个应用程序调用。此控制台应用程序持续运行,并从“父”进程的stdin上监听数据。但是,当父级停止或终止时,它启动的控制台应用程序会继续。在正常情况下,它会闲置等待来自标准输入的输入,使用最少的资源。然而,一旦父进程离开,这个控制台应用程序就会使CPU达到峰值,并使它运行的核心资源匮乏,利用率接近100%。这一直持续到我手动终止进程。理想情况下,调用父进程会自行清理,特别是因为这是在正常(非异常)“停止”条件下发生的。不幸的是,这个父进程不在我的手中。我的第一个想法是从控制台应用程序中获取调用父级,并监控其PID。如果父进程消失

c++ - 如何正确终止 dll 中的挂起线程?

大家好,我有一个包含错误的第三方库。当我调用一个函数时,它可能会挂起。库函数在dll中被调用。我决定将调用移到线程中并等待一段时间。如果线程完成,则确定。如果不是——我应该强制终止它。此处的简化示例:unsignedCounter=0;voidf(){HANDLEhThread;unsignedthreadID;//Createthesecondthread.hThread=(HANDLE)_beginthreadex(NULL,0,DoSomething,NULL,0,&threadID);if(WAIT_TIMEOUT==WaitForSingleObject(hThread,50

windows - Closehandle() 不终止进程

在CloseHandle()中关闭其句柄后,进程未终止。我有一个由CreateProcess()api创建的进程。即使在关闭其句柄后,它仍在运行。在msdn中,他们说CloseHandle()关闭句柄并且不会终止进程。必须为此调用终止线程。那为什么要CloseHandle()呢?但是当我检查CloseHandle()的返回值时,它成功了。如果是这样,我想知道在这个CloseHandle()中实际做了什么以及它为什么成功返回。我想知道使用它的句柄可以在进程上完成哪些所有操作。我觉得误导了,因为CloseHandle()成功了,但进程仍在继续!进程句柄中实际包含的内容也很棒,与其他类型的句

java - 在 Windows 7 中不从命令行强制终止 JVM

我有在JVM中运行的Cobertura检测jar。当我在运行应用程序的Windows控制台中按Ctrl-C时,JVM结束并且Cobertura结果成功刷新到cobertura.ser文件。但是我需要用命令/工具(不是Ctrl-C)停止这个JVM,就像Linux中的“softkill”(没有“-9”参数的“kill”命令)。当我使用“taskkill/PID1234”时,它写道:D:\>taskkill/PID1234ERROR:TheprocesswithPID1234couldnotbeterminated.Reason:Thisprocesscanonlybeterminatedf

node.js - 优雅地终止 Windows 中分离的 node.js 生成的子进程

不是this的副本:我可以很好地终止进程,我想知道如何在进程内检测到它正在被终止,并正常关闭。概览:我有一个CLI工具来生成和终止子node.js进程。演示代码包含在这三个文件中:spawn.js--将生成分离的child.js脚本。为简单起见,我将child的stdio通过管道传输到out.log文件child.js--一个写入文件的简单计数器,使用readline方法检测Windows中的模拟SIGINTkill.js--使用子进程的PID调用process.kill()代码:spawn.js'usestrict';varspawn=require('child_process')

c++ - 为什么只有当我在 Windows 控制台程序中按 Ctrl+Z 时,输入有时才会终止?

这个问题在这里已经有了答案:C++IssuewithcinandCTRL+Z(2个答案)关闭4年前。我知道使用ctrl-z来发出EOF或EOT信号通常已经过时且不推荐,但我只是想知道幕后发生了什么。假设我在C++中有这样的东西:#include#includeintmain(){while(!cin.eof()){stringstr;getline(cin,str);}cout如果我执行abc[^Z][newline],程序仍然运行。同样适用于abc[^D][换行符]。但是如果我输入一行纯粹包含[^Z][newline],程序正常存在。我知道它可能是特定于操作系统的,但我只是想知道那里