C'est sûr à faire, mais naturellement vous n'avez peut-être pas terminé la copie.
Lorsque la cp
commande est exécutée, elle effectue des appels système qui demandent au noyau de faire des copies du fichier. Un syscall est une fonction qu'une application peut appeler et qui demande un service au noyau, comme lire ou écrire des données sur le disque. Le processus de l'espace utilisateur attend simplement la fin de l'appel système. Si vous deviez suivre les appels, cela ressemblerait à quelque chose comme:
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
Cela se répète pour chaque fichier à copier. Aucune corruption ne se produira en raison du fonctionnement de ces appels système. Lorsque syscalls comme ceux - ci sont entrés, le signal fatal prendra effet qu'après l'syscall a fini , pas en cours d' exécution. Pour cette raison, la suppression forcée du processus entraînera sa fin uniquement après la fin de l'appel système en cours d'exécution. Cela signifie que le noyau, où réside le pilote du système de fichiers, est libre de terminer les opérations qu'il doit effectuer pour mettre le système de fichiers dans un état sain. Aucune E / S de ce type ne se terminera jamais au milieu de l'opération, ce qui en fera des opérations atomiques.
Fait intéressant, c'est pourquoi des commandes comme cp
peuvent ne pas se terminer immédiatement lorsqu'elles sont tuées. Si vous copiez un très gros fichier et le tuez, même avec SIGKILL, le processus se poursuivra jusqu'à la fin de l'appel système actuel. Avec un fichier volumineux, cela peut prendre un certain temps, car le processus sera dans un état ininterrompu.