2011-06-17 12 views
26

Có cách nào để tắt Eclipse sạch từ dòng lệnh, sao cho các tệp và không gian làm việc được lưu? kill -3 không làm gì cả. kill -1 và kill -15 (mặc định) làm cho Eclipse thoát khỏi đột ngột bằng cửa sổ kết thúc JVM. kill -9 cũng vậy. Các trường hợp sử dụng là tôi đang làm việc từ xa trên một máy tính với Eclipse được nạp vào nó, và tôi muốn tiết kiệm bộ nhớ bằng cách đóng Eclipse, nhưng tôi muốn Eclipse lưu trạng thái của nó trước tiên.Làm thế nào để xóa sạch Eclipse từ dòng lệnh Linux?

Tôi có thể sử dụng VNC hoặc một số phần mềm chia sẻ máy tính để bàn thay thế, nhưng đó thực sự là trọng lượng nặng và tôi rất thích giải pháp dòng lệnh.

CHỈNH SỬA: Thông tin hệ thống: RHEL5.1 64 bit bằng GNOME

Trả lời

3

Bất kỳ thêm ShutdownHooks (more info here) sẽ được thực hiện bởi JVM khi chấm dứt SIGTERM. Vì vậy, tôi nghĩ vấn đề là cách Eclipse được lập trình để xử lý các tín hiệu như vậy.

Vì tôi không biết quy trình làm sạch được thực hiện như thế nào trong Eclipse, tôi chỉ có thể giả định rằng nó không được gọi bởi bất kỳ ShutdownHook nào (và thay vào đó là Action hoặc một cái gì đó tương tự).

Chỉnh sửa: pidge đã cung cấp an answer below tuy nhiên chi tiết các bước cho phép bạn tắt Eclipse sạch từ dòng lệnh.

+1

Điều này đúng. Một nhà phát triển plugin có thể viết một plugin để nghe trên một socket cho một lệnh đóng, và gọi 'IWorkbench.close()'. Hoặc nhật thực và trình khởi chạy có thể được cập nhật để hỗ trợ nhiều hơn là chỉ hành động openFile. Nhưng không có gì đi kèm với nhật thực theo mặc định. –

+0

hôm nay tôi chỉ gọi $ kill pid – jorgeu

+0

kill -HUP pid hoạt động tốt cho tôi. Điều này được nhật thực để tắt máy nhưng vẫn cung cấp cho nó một sự thay đổi để xóa tất cả các tập tin khóa của nó, vv –

1

Bạn đã thử với wmctrl chưa? wmtrl -l liệt kê các cửa sổ và wmlctrl -c -P nên đóng cửa sổ. Dù sao, bạn có thể gặp sự cố với hộp thoại xác thực nhật thực.

+0

Cài đặt và ghép đôi chút một chút. Không hoạt động từ xa (qua trình bao ssh). Tại địa phương, nó thậm chí không liệt kê cửa sổ nhật thực. Có lẽ tôi chỉ sử dụng nó sai? – Maian

+0

Bạn cần đặt biến môi trường DISPLAY 'export DISPLAY =: 0.0' nếu bạn đang chạy lệnh từ xa. Xem câu trả lời của tôi cho một hướng dẫn. – pidge

0

Bạn đã thử kill -HUP (kill -1)? - đó là cách kinh điển để nói một quá trình mà bất kỳ ai đã tương tác với nó đã biến mất và nó phải dọn sạch một cách thích hợp

+0

Nope không hoạt động - Eclipse thoát đột ngột (thông báo chấm dứt JVM bật lên). – Maian

38

Tôi đã tìm ra điều này với sự giúp đỡ của gigi's answeranother question. Bạn sẽ cần các tiện ích wmctrlxdotool từ trình quản lý gói của mình.

Trừ khi bạn đang chạy trong một mô phỏng thiết bị trên màn hình tương tự, bạn cần phải thiết lập hiển thị đúng:

$ export DISPLAY=:0.0 

Sau đó (cửa sổ không liên quan elided từ ví dụ):

# 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 

# Find the window id 
$ xdotool search Exit 
Defaulting to search window name, class, and classname 
50347053 

# Send return key to the window 
$ xdotool key --window 50347053 Return 

Làm việc cho tôi trên Ubuntu 12.04, ít nhất.

EDIT: Xem Scarabeetle's answer cho các chỉnh sửa bạn cần để làm cho nó hoạt động từ tập lệnh.

+3

cảm ơn! Điều đó làm việc hoàn hảo. Một điểm nhỏ của cải tiến 'tìm kiếm xdotool Exit' là không cần thiết vì nó trả về dạng thập phân của' 0x03003c2d'. Bạn có thể trực tiếp sử dụng hex Window ID từ 'wmctrl -l' như' xdotool key --window 0x03003c2d Return' và bỏ qua bước tìm kiếm. – rkyser

7

Không đủ uy tín để nhận xét về pidge's answer trên ... Nó gần như làm việc, nhưng tôi cần phải chờ đợi đối với một số hình ảnh động Gnome3 để kết thúc và sau đó cung cấp cho tập trung vào cửa sổ "Xác nhận Thoát":

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 
2

Hãy thử giết quá trình java (es).Làm ps -ea | grep java

0

Câu trả lời cho câu hỏi này là hữu ích cho tôi trong một vấn đề tương tự: Eclipse hanging, how to kill it properly?

Sau khi tôi chết quá trình nhật thực cửa sổ Eclipse giữ ở đó cho đến khi tôi chết quá trình java (tôi không có một javaw quá trình như trong câu trả lời ở trên.Tôi chỉ có một "java" quá trình mà khi giết cố định vấn đề).