web-dev-qa-db-fra.com

Comment arrêter proprement Eclipse à partir de la ligne de commande Linux?

Existe-t-il un moyen de fermer proprement Eclipse à partir de la ligne de commande, de telle sorte que les fichiers et les espaces de travail soient enregistrés? tuer -3 ne fait rien. kill -1 et kill -15 (valeur par défaut) oblige Eclipse à se fermer brusquement avec une fenêtre contextuelle de terminaison de machine virtuelle Java. kill -9 fait la même chose.

Le cas d'utilisation est que je travaille à distance sur une machine sur laquelle Eclipse est chargé et que je souhaite économiser de la mémoire en fermant Eclipse, mais je souhaite qu'Eclipse enregistre d'abord son état.

Je pourrais utiliser VNC ou un autre logiciel de partage de bureau, mais c'est vraiment lourd et je préférerais de loin une solution en ligne de commande.

EDIT: Informations système: RHEL5.1 64 bits sous GNOME

30
Maian

Toute variable ajoutée ShutdownHooks ( plus d’informations ici ) doit être exécutée par la machine virtuelle lorsqu’elle est terminée par SIGTERM. Par conséquent, je pense que le problème est la manière dont Eclipse est programmé pour traiter de tels signaux.

Comme je ne sais pas comment le processus de nettoyage est implémenté dans Eclipse, je ne peux que supposer qu'il n'est appelé par aucune ShutdownHook (et plutôt par une Action ou quelque chose de similaire). 

Edit: pidge a fourni une réponse ci-dessous mais quelles sont les étapes à suivre pour vous permettre d’arrêter Eclipse proprement à partir de la ligne de commande.

3
vehk

J'ai compris cela avec l'aide de réponse de gigi et une autre question . Vous aurez besoin des utilitaires wmctrl et xdotool de votre gestionnaire de paquets.

Sauf si vous utilisez un émulateur de terminal sur le même écran, vous devez définir le bon écran:

$ export DISPLAY=:0.0

Puis (fenêtres non pertinentes supprimées de l'exemple):

# List windows
$ wmctrl -l
...
0x030000fa  0 kcirb Java - Eclipse

# Tell Eclipse window to close gracefully
$ wmctrl -c Eclipse

# Darn, there's a confirmation dialog
$ wmctrl -l
...
0x030000fa  0 kcirb Java - Eclipse 
0x03003c2d  0 kcirb Confirm Exit 

# Send return key to the window
$ xdotool key --window 0x03003c2d Return

Travaillé pour moi sur Ubuntu 12.04 au moins.

EDIT: Voir Réponse de Scarabeetle pour les ajustements nécessaires pour le faire fonctionner à partir d’un script.

42
pidge

Pas assez de réputation pour commenter la réponse de pidge ci-dessus ... Cela fonctionne presque, mais je devais attendre la fin de l'animation Gnome3, puis mettre en évidence la fenêtre "Confirmer la sortie":

export DISPLAY=:0.0        # Do this in main X session
wmctrl -c "Eclipse SDK"    # Close main window
sleep 1                    # Wait for animation
wmctrl -a "Confirm Exit"   # Give focus to the dialog
# Send a Return keypress to press the OK button
xdotool key --window $(xdotool search "Confirm Exit") Return
7
Scarabeetle

Essayez de tuer les processus Java. Faire ps -ea | grep Java

3

Avez-vous essayé avec wmctrl? Wmtrl -l Répertorie les fenêtres et Wmlctrl -c -P Devrait fermer la fenêtre. La boîte de dialogue de confirmation d’Eclipse peut poser problème.

1
gigi

Avez-vous essayé kill -HUP (kill -1)? - C’est le moyen canonique de dire à un processus que celui qui interagissait avec lui est parti et qu’il doit être nettoyé de manière appropriée

0
Chris Dodd

La réponse à cette question m'a été utile dans un problème similaire: Eclipse suspendu, comment le tuer correctement?

Après avoir tué le processus Eclipse, la fenêtre Eclipse y a été conservée jusqu'à ce que je supprime le processus Java. 

0
user3131978