Brunni (./3931) :
Je te parle plutôt sur le principe ; disons que fork convient mais ce n'est à mon avis qu'une utilisation détournée de l'outil puisque ce dont tu as besoin est seulement l'un de ses effets de bord, à savoir le copy-on-write, et même pas le fork lui-même (processus additionnel ; un thread semble bien plus indiqué pour cette tâche, comme ça pas besoin d'IPC pour savoir quand c'est terminé).
C'est en fait une utilisation parfaitement dans l'objectif de fork(), et la raison même pour laquelle fork() existe. Le fait qu'il soit souvent utilisé conjointement à exec n'est que parce que c'est un cas d'usage très fréquent.
La copie n'est pas un effet de bord de fork(), mais précisément son rôle. Fork a pour objectif de créer une copie du processus. C'est également de là que vient le nom de la fonction : le passé du programme se sépare en deux avenirs parallèles, formant une fourche.
Le fait qu'il utilise les fonctionnalités de la MMU pour réaliser cette copie de manière très efficace est un bonus (d'ailleurs, avant que ça soit dispo, fork devait tout recopier pour de vrai et était extrèmement lent, c'est cette époque qui lui a valu la réputation d'être très lent, alors qu'aujourd'hui il est quasiment aussi rapide qu'une création de thread)
Un thread n'est *pas* indiqué pour cette tâche, parce que pendant la sauvegarde, la base de données continue de fonctionner, et est donc modifiée. Si tu réalisais cette tâche dans un thread, soit tu obtiendrais une base de données corrompue, soit tu devrais implémenter toi-même un mécanisme de copy-on-write manuel.
Il n'y a pas besoin d'IPC, parce que le processus de la base de données n'a pas besoin d'être averti de la fin de la sauvegarde, vu qu'il n'est pas affecté par elle.
Enfin, même s'il était possible de demander à l'OS de prendre un instantané et de l'écrire dans un fichier (ce que aucun OS ne permet à ma connaissance), ça ne permettrait pas de réaliser la sauvegarde, car l'OS n'est pas capable de faire une serialization propre des structures mémoire de la base de données.
En dehors des cas triviaux, on ne peut pas se passer d'un code dédié à la sauvegarde et à la restauration.