Intereting Posts
Как я могу обмениваться окнами приложений между OS X и Linux? Почему я не могу открыть оболочку из конвейерного процесса? Какая разница между «терминалом», «оболочкой», «tty» и «консолью»? Что нужно / не следует входить .zshenv, .zshrc, .zlogin, .zprofile, .zlogout? извлечение части строки из определенного столбца Как изменить цвет всех основных моментов в файле PDF? Почему спин-блокировки имеют хороший выбор в Linux Kernel Design, а не в чем-то более распространенном в коде userland, таком как семафор или мьютекс? CentOS и небольшой пример повышения CFLAGS в make-файлах ядра Linux: какой из них используется когда? Удалите все пакеты в текстовом файле с помощью apt-get Удаляется ли каталог, когда число жестких ссылок становится 0? Удаленные файлы все еще используются: memfd: pulseaudio (pulsaudi), memfd: xshmfence (Xorg), / tmp / ib … (mysqld) Минимальная версия для syscall write Установка переменных среды по приглашению вместо командной строки rsync с различными портами ssh

Что происходит, когда я убиваю ‘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 программу.