Ini aman untuk dilakukan, tetapi secara alami Anda mungkin belum selesai menyalin.
Ketika cp
perintah dijalankan, itu membuat syscalls yang memerintahkan kernel untuk membuat salinan file. Syscall adalah fungsi yang dapat dipanggil aplikasi yang meminta layanan dari kernel, seperti membaca atau menulis data ke disk. Proses userspace hanya menunggu syscall selesai. Jika Anda melacak panggilan, itu akan terlihat seperti:
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
Ini mengulangi untuk setiap file yang akan disalin. Tidak ada korupsi akan terjadi karena cara kerja syscalls ini. Ketika syscalls seperti ini dimasukkan, sinyal fatal hanya akan berlaku setelah syscall selesai , tidak ketika sedang berjalan. Karena itu, proses pembunuhan secara paksa hanya akan menyebabkannya berhenti setelah syscall yang saat ini berjalan selesai. Ini berarti bahwa kernel, tempat driver filesystem hidup, bebas untuk menyelesaikan operasi yang perlu diselesaikan untuk menempatkan filesystem ke keadaan waras. I / O semacam ini tidak akan pernah berakhir di tengah operasi, menjadikannya operasi atom.
Menariknya, inilah sebabnya perintah seperti cp
mungkin tidak segera berakhir ketika mereka terbunuh. Jika Anda menyalin file yang sangat besar dan membunuhnya, bahkan dengan SIGKILL, prosesnya masih akan berjalan sampai syscall saat ini selesai. Dengan file besar, ini mungkin memakan waktu cukup lama, karena prosesnya tidak akan terganggu.