如何安全地杀死 robocopy 进程
Posted
技术标签:
【中文标题】如何安全地杀死 robocopy 进程【英文标题】:How to safely kill robocopy process 【发布时间】:2021-03-25 15:23:57 【问题描述】:我有一个 win32 应用程序,我正在为一些文件传输启动一个 robocopy 子进程。如果我使用 TerminateProcess 终止进程,是否有可能以损坏的文件结束?如果可以,如何避免?
【问题讨论】:
你试过了吗?您可以设置一个复制非常大的文件的测试,然后练习几次杀死 robocopy,看看结果如何。这可能不能证明它是安全的,但它可以很容易地证明它是否不安全。 有几种方法可以结束进程,TerminateProcess
应该是最后的努力。
一旦您将文件复制到外部进程,就没有安全的方法来终止该进程。您是否因文件系统损坏而告终,很大程度上取决于所涉及的文件系统。如果您想安全地取消复制,请实施复制并使其可取消。
【参考方案1】:
来自TerminateProcess函数,
TerminateProcess 函数用于无条件地导致 退出的过程。动态链接维护的全局数据状态 如果使用 TerminateProcess 而不是库 (DLL) 可能会受到损害 而不是 ExitProcess。
请记住,TerminateProcess
不允许其目标清理并以有效状态退出。
尝试干净地关闭进程,参考下面的链接,
How To Terminate an Application "Cleanly" in Win32如果 robocopy 进程终止,被复制的文件将具有 (a) 1980-01-01 (b) 与原始文件大小相同的时间戳。
然后在命令行中再次使用robocopy复制带有TimeStamp的文件。
参考:How to use Robocopy to copy files with TimeStamp in command line
【讨论】:
以上是关于如何安全地杀死 robocopy 进程的主要内容,如果未能解决你的问题,请参考以下文章