【问题标题】:How to safely kill robocopy process如何安全地杀死 robocopy 进程
【发布时间】:2023-03-08 11:57:02
【问题描述】:

我有一个 win32 应用程序,我正在为一些文件传输启动一个 robocopy 子进程。如果我使用 TerminateProcess 终止进程,是否有可能以损坏的文件结束?如果可以,如何避免?

【问题讨论】:

  • 你试过了吗?您可以设置一个复制非常大的文件的测试,然后练习几次杀死 robocopy,看看结果如何。这可能不能证明它是安全的,但它可以很容易地证明它是否不安全。
  • 有几种方法可以结束进程,TerminateProcess 应该是最后的努力。
  • 一旦您将文件复制到外部进程,就没有安全的方法来终止该进程。您是否因文件系统损坏而告终,很大程度上取决于所涉及的文件系统。如果您想安全地取消复制,请实施复制并使其可取消。

标签: winapi robocopy


【解决方案1】:

来自TerminateProcess函数,

TerminateProcess 函数用于无条件地导致 退出的过程。动态链接维护的全局数据状态 如果使用 TerminateProcess 而不是库 (DLL) 可能会受到损害 而不是 ExitProcess。

请记住,TerminateProcess 不允许其目标清理并以有效状态退出。

尝试干净地关闭进程,参考下面的链接,

如果 robocopy 进程终止,被复制的文件将具有 (a) 1980-01-01 (b) 与原始文件大小相同的时间戳。

然后在命令行中再次使用robocopy复制带有TimeStamp的文件。

参考:How to use Robocopy to copy files with TimeStamp in command line

【讨论】:

    猜你喜欢
    • 2013-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-21
    • 2019-01-07
    相关资源
    最近更新 更多