从命令行关闭正在运行的程序
Posted
技术标签:
【中文标题】从命令行关闭正在运行的程序【英文标题】:Closing a running program from commandline 【发布时间】:2012-03-01 19:21:00 【问题描述】:Visual Studio 2010 C#
是否可以从命令行运行和关闭程序?我需要做这样的事情:
myProgram.exe -start
-- do something --
myProgram.exe -stop
我知道如何实现第一部分(main 中的 String[] args),但是如何关闭正在运行的程序?
编辑
myProgram.exe 正在处理一些 UDP 通信,并且必须在执行中的内容时执行 - 做某事 - 执行。抱歉我说的不准确。
【问题讨论】:
如果您使用 WinForms,这可能会有所帮助:***.com/questions/4547643/… 你能提供更多细节吗? 这里的问题很难理解:“myProgram.exe
”进程会在主函数完成后退出(不存在),即在“--do something--”之后完成了,就不用外杀了。如果这不是您提出的问题,您需要澄清您的问题。
myProgram.exe 必须在我 -- 做某事 -- 的整个过程中运行。完成之后(调用其他进程)myprogram.exe 应该被关闭。
【参考方案1】:
我猜你知道如何检查命令行参数并查找是否已指定停止?以下应该可以完成这项工作。
var currentProcess = System.Diagnostics.Process.GetCurrentProcess();
var matchingProcesses = System.Diagnostics.Process.GetProcesses().Where(x => x.Id != currentProcess.Id && x.ProcessName == currentProcess.ProcessName);
foreach (var process in matchingProcesses)
process.Kill();
【讨论】:
这是一个很好的方法。我不会终止进程,而是向该进程发送消息。 您也可以在应用程序中使用静态作为粗略的消息系统。即 killHasBeenSignalled = true 然后在开始条件下检查它。 如何访问另一个任务的静态成员? 是的,静态应该在同一个应用程序域中的任何正在运行的进程之间共享(我认为)。您需要考虑在访问或设置时使用锁是否合适。【参考方案2】:这样的事情可以使用taskkill吗?
即如果你想关闭myProgram.exe,你可以执行
taskkill /IM myProgram.exe
【讨论】:
也可以用/F
扩展这一行来强制关闭程序。
我需要在关闭程序时做一些事情。是否可以注册由某种关闭事件触发的回调?【参考方案3】:
使用旨在关闭进程的命令行程序 - pskill 就是这样一个程序。
pskill myProgram.exe
内置实用程序是taskkill:
taskkill /im myProgram.exe
【讨论】:
【参考方案4】: 按名称获取进程 ID 杀死进程【讨论】:
【参考方案5】:正如 Fox32 在他的评论中已经提到的,你真的应该选择this approach,因为在这种情况下你的应用程序可以真正优雅地关闭自己。如果您只是简单地使用 taskkill 等从外部世界杀死您的进程,您可能真的会遇到麻烦,具体取决于您使用的资源(网络、数据库、文件等)。
【讨论】:
以上是关于从命令行关闭正在运行的程序的主要内容,如果未能解决你的问题,请参考以下文章
如何从命令行/tty 启动 GNOME Wayland 会话? [关闭]