Điều này là an toàn để làm, nhưng tự nhiên bạn có thể chưa hoàn thành bản sao.
Khi cp
lệnh được chạy, nó tạo ra các tòa nhà hướng dẫn kernel tạo các bản sao của tệp. Tòa nhà chọc trời là một chức năng mà một ứng dụng có thể gọi yêu cầu dịch vụ từ kernel, chẳng hạn như đọc hoặc ghi dữ liệu vào đĩa. Quá trình không gian người dùng chỉ đơn giản là chờ tòa nhà kết thúc. Nếu bạn theo dõi các cuộc gọi, nó sẽ trông giống như:
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
Điều này lặp lại cho mỗi tệp sẽ được sao chép. Sẽ không có tham nhũng xảy ra vì cách thức hoạt động của các tòa nhà này. Khi các tòa nhà như thế này được đưa vào, tín hiệu gây tử vong sẽ chỉ có hiệu lực sau khi tòa nhà đã hoàn thành , không phải trong khi nó đang chạy. Bởi vì điều này, việc giết chết quá trình sẽ chỉ khiến nó chấm dứt sau khi tòa nhà hiện đang chạy xong. Điều này có nghĩa là kernel, nơi trình điều khiển hệ thống tập tin sống, có thể tự do hoàn thành các hoạt động mà nó cần hoàn thành để đưa hệ thống tập tin vào trạng thái lành mạnh. Bất kỳ I / O loại này sẽ không bao giờ bị chấm dứt ở giữa hoạt động, biến chúng thành các hoạt động nguyên tử.
Thật thú vị, đây là lý do tại sao các lệnh như cp
có thể không chấm dứt ngay lập tức khi chúng bị giết. Nếu bạn đang sao chép một tệp rất lớn và giết nó, ngay cả với SIGKILL, quá trình này vẫn sẽ chạy cho đến khi tòa nhà hiện tại kết thúc. Với một tệp lớn, việc này có thể mất một lúc, vì quá trình sẽ ở trạng thái không bị gián đoạn.