Bunu yapmak güvenlidir, ancak doğal olarak kopyayı bitirmemiş olabilirsiniz.
Ne zaman cp
komut çalıştırılır, yani dosyanın kopyalarını yapmak çekirdeği talimat syscalls yapar. Sistem çağrısı, bir uygulamanın çekirdekten bir hizmet isteyen, örneğin diske veri okuma veya yazma gibi bir işlevi arayabileceği bir işlevdir. Kullanıcı alanı süreci sadece sistem çağrısının bitmesini bekler. Çağrıları izlemiş olsaydın şöyle bir şey olurdu:
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
Bu kopyalanacak her dosya için tekrarlanır. Bu sistemlerin çalışması nedeniyle herhangi bir yolsuzluk oluşmaz. Bunun gibi sistemler tekrar girildiğinde, ölümcül sinyal sadece sistem bittikten sonra çalışır durumda değil, etkili olur. Bu nedenle, süreci zorla öldürmek, yalnızca çalışan sistem çağrısı bittikten sonra sona ermesine neden olacaktır. Bu, dosya sistemi sürücüsünün yaşadığı çekirdeğin, dosya sistemini aklı başında bir duruma getirmek için tamamlaması gereken işlemleri tamamlamada özgür olduğu anlamına gelir. Bu tür herhangi bir G / Ç, işlemin ortasında hiçbir zaman sonlandırılmayacak ve atomik işlem yapılabilecektir.
İlginçtir, bu yüzden böyle komutlar cp
öldürüldüğünde derhal sonlandırılmayabilir. Çok büyük bir dosyayı kopyalayıp öldürürseniz, SIGKILL ile bile, geçerli çağrı tamamlanıncaya kadar işlem devam edecektir. Büyük bir dosyada, işlem kesintisiz bir durumda olacağından bu işlem biraz zaman alabilir.