Intereting Posts
Разница между cat и '>', чтобы обнулить файл Может ли фокус Microsoft LifeCam HD-5000 фиксироваться на бесконечности под Linux? Как импортировать оконный менеджер в файл iso base linux Почему этот исполняемый файл все еще выполняется после того, как я удалил его? Найдите список всех файлов с шаблоном даты, чтобы снести их вместе. Задача cron отключить мой звук не работает Создавать загрузочный USB-накопитель Windows не удается по неизвестной причине vi показывает как vim Прерывает ли неправильные блоки? сжатие tar без структуры каталогов Обновление Solaris Live на ZFS: за и против загрузочной среды в новом корневом пуле против существующего корневого пула Как установить / установить mutt с Gmail на CentOS и Ubuntu? Почему awk не делает сумму ноль, а вместо этого очень маленьким? Как сделать загрузочный pendrive для Kali Linux в системе UEFI? Поиск mp3-коллекции для песен с определенной длиной песни

Что происходит, когда я убиваю ‘cp’? Это безопасно и имеет ли это какие-либо последствия?

Каковы последствия для файловой системы ext4, когда я прекращаю копирование команды cp , нажимая Ctrl + C во время ее работы?

Файловая система повреждена? Пространство раздела, занятое неполным скопированным файлом, все еще используется после его удаления?

И, самое главное, безопасное ли завершение процесса cp ?

Это безопасно, но, естественно, вы не закончили копирование.

Когда команда cp запущена, она делает системные вызовы, которые инструктируют kernel ​​делать копии файла. Системный вызов – это функция, которую может вызывать приложение, которое запрашивает у ядра службу, такую ​​как чтение или запись данных на диск. Процесс пользовательского пространства просто ожидает завершения системного вызова. Если бы вы отслеживали вызовы, это выглядело бы примерно так:

 open("/home/user/hello.txt", O_RDONLY) = 3 open("/mnt/hello.txt", O_CREAT|O_WRONLY, 0644) = 4 read(3, "Hello, world!\n", 131072) = 14 write(4, "Hello, world!\n", 14) = 14 close(3) = 0 close(4) = 0 

Это повторяется для каждого файла, который нужно скопировать. Никакой коррупции не произойдет из-за того, как работают эти системные вызовы. Когда вводятся подобные системные вызовы, фатальный сигнал вступает в силу только после завершения системного вызова, а не во время его работы. Из-за этого принудительное завершение процесса приведет к его завершению только после завершения текущего запущенного системного вызова. Это означает, что kernel, в котором находится драйвер файловой системы, может свободно завершать операции, которые ему необходимо выполнить, чтобы перевести файловую систему в нормальное состояние. Любой ввод-вывод такого рода никогда не будет завершен в середине операции, что делает их атомарными операциями.

Интересно, что именно поэтому такие команды, как cp могут не завершаться сразу после их уничтожения. Если вы копируете очень большой файл и уничтожаете его, даже с помощью SIGKILL, процесс все равно будет выполняться до завершения текущего системного вызова. С большим файлом это может занять некоторое время, так как процесс будет в непрерывном состоянии.

Поскольку cp является командой пользователя, это не влияет на целостность файловой системы.

Вы, конечно, должны быть готовы к тому, что по крайней мере один файл не будет скопирован полностью, если вы убьете работающую cp программу.