How to Resolve "Cannot Unregister the Machine While It Is Locked" Error in Vagrant

Lorsque vous travaillez avec Vagrant, un outil permettant de créer et de gérer des environnements virtuels, vous pouvez rencontrer un message d’erreur indiquant « Cannot unregister the machine while it is locked ». Ce message est souvent accompagné d’un bloc de messages d’erreur et de sorties de commande, comme indiqué ci-dessous :

vagrant destroy
default: Êtes-vous sûr de vouloir détruire la machine virtuelle 'default' ? [y/N] y
==> default: Destruction de la machine virtuelle et des disques associés…
Une erreur s'est produite lors de l'exécution de VBoxManage, une interface en ligne de commande utilisée par Vagrant pour contrôler VirtualBox.
...
VBoxManage : erreur : Impossible de désenregistrer la machine 'CnC_default_1643660523119_45689' pendant qu'elle est verrouillée
...

Cette erreur est généralement levée lorsqu’on tente de détruire une machine virtuelle Vagrant à l’aide de la commande vagrant destroy. Elle indique que la machine virtuelle est dans un état verrouillé, empêchant son désenregistrement et sa suppression.

Solution#

Le problème peut être résolu en terminant manuellement toutes les instances en cours d’exécution de VirtualBox avant d’exécuter à nouveau la commande vagrant destroy. La commande suivante peut être exécutée pour tuer toutes les instances en cours de VBoxHeadless, le processus responsable de l’exécution des machines virtuelles en mode tête-à-tête :

killall -9 VBoxHeadless && vagrant destroy

Cette commande va forcer la terminaison de tous les processus VBoxHeadless en cours d’exécution, puis exécuter la commande vagrant destroy pour supprimer la machine virtuelle.

Compréhension de la commande#

Analysons ce que fait cette commande :

  • killall -9 VBoxHeadless : La commande killall envoie un signal pour terminer tous les processus ayant un nom spécifique, ici VBoxHeadless. L’option -9 envoie le signal SIGKILL, qui tue immédiatement le processus.

  • && : Cet opérateur shell permet d’exécuter une deuxième commande uniquement si la première a réussi.

  • vagrant destroy : Cette commande permet de détruire la machine virtuelle Vagrant, qui devrait maintenant s’exécuter sans problème.

Rencontrer des erreurs lors du travail avec Vagrant peut être frustrant, mais comprendre comment les résoudre efficacement vous épargnera du temps et des efforts. L’erreur « Cannot unregister the machine while it is locked » peut être facilement corrigée en combinant les commandes killall et vagrant destroy, permettant ainsi de reprendre vos tâches de développement sans interruption.