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

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

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

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

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

Linux и Unix - лучшая ОС в мире.