从命令行关闭正在运行的程序

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 等从外部世界杀死您的进程,您可能真的会遇到麻烦,具体取决于您使用的资源(网络、数据库、文件等)。

【讨论】:

以上是关于从命令行关闭正在运行的程序的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法从命令行关闭 iOS 模拟器?

从命令行使用 sendmail [关闭]

如何从命令行/tty 启动 GNOME Wayland 会话? [关闭]

从命令行启用/禁用 Windows 10 中的设备 [关闭]

如何从 node.js 应用程序运行命令行工具

使用外部图标文件从命令行构建/运行 IOS 应用程序