web-dev-qa-db-ja.com

LinuxコマンドラインからEclipseをきれいにシャットダウンする方法は?

コマンドラインからEclipseをきれいにシャットダウンして、ファイルやワークスペースを保存する方法はありますか? kill -3は何もしません。 kill -1およびkill -15(デフォルト)は、EclipseをJVM終了ポップアップで突然終了します。 kill -9も同じことを行います。

ユースケースは、Eclipseがロードされたマシンでリモートで作業していて、Eclipseを閉じてメモリを節約したいが、最初にEclipseにその状態を保存させたい場合です。

VNCまたはいくつかの代替デスクトップ共有ソフトウェアを使用することもできますが、それは非常に負荷が大きく、コマンドラインソリューションの方がはるかに望ましいと思います。

編集:システム情報:GNOMEを使用したRHEL5.1 64ビット

30
Maian

追加されたShutdownHooks詳細はこちら )は、SIGTERMで終了したときにJVMによって実行されます。したがって、問題はEclipseがそのような信号を処理するようにプログラムされている方法にあると思います。

クリーンアッププロセスがEclipseでどのように実装されているのかはわからないので、ShutdownHook(およびActionまたは類似のもの)から呼び出されていないと想定できます。

編集:pidgeは 以下の回答 を提供していますが、コマンドラインからEclipseを正常にシャットダウンできるようにする手順の詳細を示しています。

3
vehk

gigi's answer および another question の助けを借りてこれを理解しました。パッケージマネージャから wmctrl および xdotool ユーティリティが必要になります。

同じディスプレイ上のターミナルエミュレータで実行している場合を除き、正しいディスプレイを設定する必要があります。

$ export DISPLAY=:0.0

次に(例から除外された無関係なウィンドウ):

# 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

少なくともUbuntu 12.04で私のために働いた。

編集:スクリプトから機能させるために必要な調整については、 Scarabeetleの回答 を参照してください。

42
pidge

上記の pidge's answer についてコメントするには十分な評判がありません...ほとんど問題なく動作しますが、Gnome3アニメーションが完了するのを待ってから、[終了の確認]ウィンドウにフォーカスを移す必要がありました。

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

Javaプロセスを殺してみてください。)ps -ea | grep Java

Wmctrlで試しましたか? wmtrl -lはウィンドウをリストし、wmlctrl -c -Pはウィンドウを閉じます。とにかく、Eclipseの確認ダイアログで問題が発生する可能性があります。

1
gigi

試しましたか kill -HUPkill -1)? -これは、プロセスと対話していた人が誰もいなくなっており、適切にクリーンアップする必要があることをプロセスに伝える正規の方法です

0
Chris Dodd

この質問への答えは、同様の問題で私に役立ちました: Eclipseがハングし、適切にそれを殺す方法は?

Eclipseプロセスを強制終了した後、Javaプロセスを強制終了するまでEclipseウィンドウがそこにありました(上記の回答のようにjavawプロセスがありませんでした。 "Java"プロセスは1つしかありませんでした。殺されたときに問題が修正されました)。

0
user3131978