在 Unix 或 Linux 上,很容易优雅地要求正在运行的应用程序终止:向其发送 SIGTERM 信号。如果其进程 ID 为 1234,您只需运行kill 1234
或kill -s TERM 1234
或即可kill -15 1234
。
我怎样才能在 Windows 中做同样的事情?
如果我没记错的话,任务管理器的“结束任务”功能(不是“结束进程”功能)曾经可以满足我的要求。但是,从 Windows 8.1 开始,它不再那么温和;当我使用该功能时,它会导致我丢失未保存的数据。
我不想为此编写任何代码。如果要,我会在 Stack Overflow 上提问。:)
答案1
任务终止程序
您可以使用taskkill.exe
。 (来源。) 它是 Windows 的一部分。
要终止进程 ID 为 1234 的进程:
taskkill /pid 1234
要终止 Windows 记事本:
taskkill /im notepad.exe
要保存击键:
taskkill /im notep*
如需更多帮助:
taskkill /?
如果添加,/f
则无论如何都会强制关闭应用程序。如果不添加/f
,taskkill
则只会正常要求应用程序关闭。 (来源。)
或者直接退出
如果您不想为此烦恼,只需退出 Windows 用户帐户,然后重新登录即可。
控制台应用程序
关于控制台应用程序(例如 PowerShell),Chris Becke添加:
在 Windows 上没有真正优雅地关闭控制台应用程序的方法。它们需要支持某种优雅关闭机制。
答案2
您可以使用rmlogotest.exe
:重启管理器徽标测试工具。此免费软件实用程序由 Microsoft 编写,是 Windows 应用认证工具包的一部分。
要获取最新版本的 Windows 应用认证工具包,请下载并运行 Windows SDK 安装程序。(您可以通过以下方式找到 Windows SDK 安装程序网络搜索。)取消选中除 Windows 应用认证工具包之外的所有复选框。等待工具包下载并安装。如果我没记错的话,该工具包有几百兆字节。
如果您使用的是 Windows 11 SDK,我猜rmlogotest.exe
可能是在C:\Program Files (x86)\Windows Kits\10\App Certification Kit
。
打开命令提示符。更改到正确的目录。rmlogotest
然后输入空格,然后输入进程的进程 ID 号。
如果进程是“重新启动管理器感知”的,rmlogotest
则会正常重新启动它并告诉您“徽标验证已通过”。否则,rmlogotest
将要求它正常终止,然后可能会告诉您“徽标验证失败”。
我尝试使用rmlogotest.exe
终止记事本,它按预期工作。记事本询问我是否要保存我输入的未保存的文本。
(如果您想知道重启管理器是什么以及它的作用,让我来解释一下。重启管理器是 Windows 的一部分,由 Windows Installer 4.0 及更高版本使用。当 Windows Installer 需要覆盖或删除打开的文件时,它使用一个三步过程。它告诉重启管理器正常结束正在使用该文件的进程。它覆盖该文件。然后它告诉重启管理器重新启动该过程。)
答案3
GnuWIN32 具有常见 Linux 实用程序的 Windows 端口,包括 kill.exe
http://gnuwin32.sourceforge.net/
它支持以下信号(按名称或数字)
λ kill -l
INT
ILL
FPE
KILL
SEGV
TERM
CHLD
ABRT