2010-12-04 8 views
0

J'exécute un processus qui crée un fichier et utilise ce fichier. Après la fin de ce processus, je supprime ce fichier.Comment libérer toutes les ressources d'un processus?

Si une exception se produit entre-temps, alors comment savoir si le fichier est libéré par le processus ou non et comment le supprimer s'il est verrouillé par le processus.

Merci pour toute aide :)

+0

Par "processus", parlez-vous réellement d'un appel de méthode ou d'un thread dans un seul programme? – IanNorton

+0

Non pas un appel de méthode, c'est un fichier exe qui est appelé par un processus. –

Répondre

1

Sous Windows, à la fin du processus, le système d'exploitation renvoie automatiquement toutes les ressources appartenant à ce processus. Fin de l'histoire. Par exemple, disons que vous avez fait "CreateFileMapping()" sur chacun des deux processus pour partager un segment de mémoire. Par exemple, par exemple, vous avez créé "CreateFileMapping()". Lorsque le premier processus se termine, Windows décrémente le compteur d'utilisation et seul le processus restant peut toujours utiliser l'objet. Lorsque le second processus fait un "CloseHandle()" (ou quitte lui-même), le compteur est décrémenté à zéro, et l'objet est complètement libéré. En d'autres termes, Windows récupèrera la ressource lorsqu'elle n'est plus utilisée, que les processus se nettoient gracieusement après eux-mêmes ou non. Et non, même si vous ouvrez un fichier pour un accès exclusif, le fichier lui-même ne sera pas "verrouillé" une fois le handle de fichier fermé (et Windows le fermera automatiquement lorsque le programme sera terminé).

+0

Si le processus ne se termine pas avec élégance et qu'il est terminé par une exception ou quelque chose, alors si les ressources sont libérées? –

+0

La réponse de paulsm4 a couvert cela avec la dernière phrase; Windows le ferme lorsque le programme se termine. –

0

Lorsque votre programme se termine - peu importe par quels moyens - le fichier, si elle existe encore, ne sera plus verrouillé par le processus ... parce que le processus n'existe pas .

Mais je dois me demander; Si le fichier est en train d'être supprimé de toute façon à la fin, avez-vous vraiment besoin de créer un fichier en premier lieu?

+0

Je crée le fichier avec du contenu puis je l'utilise et après l'avoir utilisé, je le supprime. Puis à nouveau sur une autre demande, je crée un fichier de plus. Le fichier ne peut pas être partagé, donc si plusieurs utilisateurs l'utilisent, j'ai besoin de créer plusieurs fichiers. –

+0

Ce que vous décrivez ressemble à quelque chose où vous n'avez pas du tout besoin d'un fichier. Un fichier est généralement destiné à quelque chose qui * doit être partagé * d'une manière ou d'une autre. Si les données ne sont nécessaires que pour un seul contexte de courte durée, la mémoire est probablement meilleure (sauf si c'est une très grande quantité de données). Mais le reste de ma réponse s'applique toujours de toute façon; Une fois le processus terminé, le fichier ne sera plus verrouillé. Il suffit donc de le supprimer de toute façon. –

Questions connexes