taskkill和taskkill /f之间的区别

10
Microsoft Technet 上,我看到taskkill有一个/f参数来强制终止进程。 我想知道内部该怎么做,以了解这种操作的影响。 taskkill(不带/f)并不只是向进程发送WM_CLOSE消息,否则我的应用程序会询问是否保存已打开的文档。 这使我认为它已经在TerminateProcess (MSDN)级别上运行。 但是,TerminateProcess没有强制终止的参数。
那么,taskkilltaskkill /f在内部都做了什么呢?
我阅读了相关的问题Difference between C# Process.Kill() and Taskkill,但它没有答案。
1个回答

6
很可能taskkill /f使用TerminateProcess,而没有/ftaskkill仅仅发布一个WM_QUIT消息(不是WM_CLOSE)。文档说TerminateProcess无条件地终止进程。
你可以尝试以下实验:
  1. 启动notepad.exe并在notpad窗口中输入一些字符
  2. 键入taskkill /f /im notepad.exe。记事本将立即退出
现在这样做:
  1. 启动notepad.exe并在notpad窗口中输入一些字符
  2. 键入taskkill /im notepad.exe。Notepad不会立即退出,但会询问是否要保存修改。

1
好的,通常情况下,我的应用程序应该能够处理所有挂起的Windows消息,但在/f情况下它不能。因此,在正常情况下,可能无法终止处于“未响应”状态的应用程序,因为“未响应”意味着Windows已检测到该应用程序不再处理消息。 - Thomas Weller
1
一个 WM_QUIT 消息不太可能导致记事本显示其“保存修改?”对话框;因为在接收到 WM_QUIT 时,你的主窗口通常已经关闭了。 - Jonathan Potter
2
在Windows10上,它不是 WM_QUIT,而是 WM_CLOSE,就像一个已删除的答案中提到的那样。 - Martin Ba
确定地,WM_CLOSE 在 Windows 10 中被使用。发送的不是 WM_QUIT。 - xMRi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接