Làm thế nào để mềm diệt ứng dụng gui qua thiết bị đầu cuối?


22

Có cách nào để đóng ứng dụng GUI theo cách thân thiện " vui lòng thoát ngay bây giờ " mà không cần truy cập đồ họa vào cửa sổ ứng dụng không?

Ví dụ: nếu màn hình Gnome / X chuyển sang màu đen, tôi muốn chuyển sang tty2 và đóng các ứng dụng như firefox theo cách cho phép họ lưu cấu hình của mình, v.v. Tốt nhất không cần truy vấn thêm của người dùng.

Câu trả lời:


19

Thông thường, bạn có thể sử dụng SIGHUP để "thân thiện" đóng ứng dụng (có hoặc không có giao diện đồ họa).

kill -HUP <application_pid>

EDITED : đã thêm một số thông tin khác

Cách xử lý SIGHUP phụ thuộc vào ứng dụng, vì vậy, như Dave lưu ý, có thể xảy ra tín hiệu này bị che hoặc xử lý. Tuy nhiên, tất cả các ứng dụng tương tác đều thoát một cách duyên dáng với SIGHUP.

Mặt khác, tôi phải thừa nhận rằng thường thì tôi theo lược đồ này:

kill -HUP <application_pid>
# check if application is still running
kill -INT <application_pid>
# check if application is still running
kill -KILL <application_pid>

Rõ ràng lệnh cuối cùng không "thân thiện" lắm.


3
Nếu bạn không biết PID của ứng dụng, bạn có thể sử dụng pkillđể chỉ định tên của tệp thực thi thay thế. Ví dụ:pkill -HUP firefox-bin
Caleb

@Dave quá: Thú vị, tôi thấy điều này có liên quan trong đó gợi ý một thứ tự tương tự nhưng được hoàn nguyên: TERM-> INT-> HUP (nhớ tuổi già). Có lẽ tôi sẽ ghi nhớ HUP-> INT-> HẠN, vì KILL dường như không thân thiện với tôi. Cảm ơn tất cả.
jfk

@Caleb, chỉ cần cẩn thận ở đó có nhiều quy trình có cùng tên: pkillsẽ giết tất cả. Ví dụ, chạy điều này một vài lần để thực hiện một số quy trình nền : sed "s/Woo/woo/" < /dev/urandom >> /dev/null &. Sau đó làm pkill -HUP sed. Bạn sẽ giết tất cả các trường hợp sed bạn đã bắt đầu cộng với bất kỳ trường hợp nào khác làm công việc hữu ích.
ahcox

@Caleb hơn nữa, pkillcũng sẽ giết một số ứng dụng mà bạn không mong đợi: ví dụ: nếu bạn chromiumđang chạy và muốn giết một chương trình được gọi rom, pkillsẽ vui vẻ bắn chromiumhạ. Sử dụng tốt hơn killall, sẽ chỉ khớp với tên chính xác (không phải trên Solaris, nơi nó thực sự giết chết tất cả các quy trình ).
Ruslan

@Ruslan Hoặc sử dụng pkill -xđể có được một trận đấu chính xác thay vì khớp một phần. Cá nhân tôi tận dụng kết hợp một phần để lưu gõ, nhưng bạn phải biết công cụ này làm gì. Vâng, theo mặc định, nó phù hợp với các chuỗi một phần. Một tùy chọn hữu ích khác là -fkhớp với dòng lệnh đầy đủ thay vì chỉ $0.
Caleb

5

Bạn có thể muốn thử:

kill -TERM <pid>

hoặc là

kill -TERM `pidof <application_name>`

Ít nhất là trên một số hệ thống, khi hệ thống đang trong quá trình tắt máy, tất cả các quy trình đều được gửi tín hiệu TERM (15) trước khi chúng được gửi tín hiệu KILL (9). HUP thường chỉ khiến ứng dụng tải lại các cấu hình của nó, nhưng nó có thể khác nhau trên cơ sở từng quá trình.


2

Không có cách nào chung để yêu cầu một ứng dụng thoát và lưu cấu hình của nó. Có thể có cách thông báo cho các ứng dụng bằng cách sử dụng một khung cụ thể, ví dụ: dcop kfoo MainApplication-Interface quitđối với một số ứng dụng KDE 3. Lưu ý rằng ứng dụng có thể hiển thị hộp thoại yêu cầu bạn xác nhận.

Nếu màn hình X trở nên không sử dụng được, hãy hủy máy chủ X. Nhấn Ctrl+ Alt+ BackSpace; nếu nó không hoạt động, giết tiến trình máy chủ X với sudo pkill -x Xorg. Khi máy chủ X chết, tất cả các ứng dụng X đều được thông báo và chúng sẽ cố gắng thoát ra một cách duyên dáng (không có gì đảm bảo rằng chúng sẽ lưu mọi thứ, nhưng đó là cách tốt nhất của bạn).


Tôi không biết liệu các ứng dụng sẽ được thông báo hay chỉ bị giết; và vì tổ hợp phím không được bật theo mặc định trên Fedora ..... Bây giờ tôi biết cách tiêu diệt nó bằng dòng lệnh!
jfk

1

Câu trả lời của Akin cho @ andcoz, nếu bạn không biết về PID của ứng dụng (Tôi cho rằng bạn không biết điều đó), hãy thử điều này:

kill -HUP `pidof [application_name]`

2
Thực hiện một bước đó và cố gắng pkill -HUP [application_name]:)
Caleb

Mới học pkill và pgrep: D
jfk

1

Hai lệnh khác bạn có thể muốn xem xét là wmctrl -cxdotool windowkill. Tôi không chắc liệu đó windowkillcó chính xác là những gì bạn đang theo đuổi không, nếu không bạn có thể quan tâm đến windowdeletebản vá.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.