Как безопасно убить процесс robocopy

У меня есть приложение win32, и я запускаю дочерний процесс robocopy для передачи некоторых файлов. Если я завершу процесс с помощью TerminateProcess, есть ли возможность завершить его с поврежденными файлами? Если да, то как этого избежать?


person Gregor Sattel    schedule 25.03.2021    source источник
comment
Ты это пробовал? Вы можете настроить тестовое копирование очень больших файлов, а затем несколько раз попрактиковаться в отключении robocopy и посмотреть, каков будет результат. Это может не доказывать, что это безопасно, но может легко продемонстрировать, что это НЕ безопасно.   -  person StayOnTarget    schedule 25.03.2021
comment
Есть несколько способов завершить процесс, и TerminateProcess должен быть последней попыткой сделать это.   -  person Andy    schedule 25.03.2021
comment
После того, как вы запустите копирование файлов во внешний процесс, не будет безопасного способа завершить этот процесс. Столкнетесь ли вы с повреждением файловой системы или нет, во многом зависит от задействованных файловых систем. Если вы хотите безопасно отменить копирование, реализуйте копирование и сделайте его отменяемым.   -  person IInspectable    schedule 25.03.2021


Ответы (1)


Из функции TerminateProcess

Функция TerminateProcess используется для безусловного завершения процесса. Состояние глобальных данных, поддерживаемых библиотеками динамической компоновки (DLL), может быть скомпрометировано, если используется TerminateProcess, а не ExitProcess.

Имейте в виду, что TerminateProcess не позволяет своей цели очиститься и выйти в допустимом состоянии.

Попробуйте закрыть процесс чисто, перейдите по ссылке ниже,

Если процесс robocopy прерван, копируемый файл будет иметь отметку времени (a) 1980-01-01 (b) того же размера, что и исходный файл.

Затем используйте robocopy, чтобы снова скопировать файлы с TimeStamp в командной строке.

См.: Как использовать Robocopy для копирования файлы с отметкой времени в командной строке

person Strive Sun    schedule 26.03.2021