Bagaimana cara lunak membunuh aplikasi gui melalui terminal?

22

Apakah ada cara untuk menutup aplikasi GUI dengan ramah " tolong keluar sekarang " dengan cara, tanpa akses grafis ke jendela aplikasi?

Misalnya, jika tampilan Gnome / X mogok menjadi hitam, saya ingin beralih ke tty2 dan menutup aplikasi seperti firefox dengan cara yang memungkinkan mereka menyimpan konfigurasi mereka, dll. Paling-paling tanpa kueri pengguna lebih lanjut.

jfk
sumber

Jawaban:

19

Biasanya, Anda dapat menggunakan SIGHUP untuk "ramah" menutup aplikasi (dengan atau tanpa antarmuka grafis).

kill -HUP <application_pid>

Diedit : menambahkan beberapa info lainnya

Cara SIGHUP ditangani tergantung pada aplikasi, jadi, seperti yang dicatat Dave , dapat terjadi bahwa sinyal ini ditutup atau ditangani. Namun cukup semua aplikasi interaktif keluar dengan anggun dengan SIGHUP.

Di sisi lain, saya harus mengakui bahwa biasanya saya mengikuti skema ini:

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

Jelas perintah terakhir tidak begitu "ramah".

andcoz
sumber
3
Jika Anda tidak tahu PID aplikasi yang dapat Anda gunakan pkilluntuk menentukan nama yang dapat dieksekusi. Misalnya:pkill -HUP firefox-bin
Caleb
@Dave juga: Menarik, saya menemukan ini terkait yang menyarankan urutan yang sama tetapi dikembalikan: TERM-> INT-> HUP (pikiran usia tua). Mungkin aku akan mengingat-ingat HUP-> INT-> TERM, karena MEMBUNUH sepertinya tidak ramah padaku. Terimakasih untuk semua.
jfk
@ Caleb, berhati-hatilah di sana di mana ada beberapa proses dengan nama yang sama: pkillakan membunuh mereka semua. Misalnya, menjalankan ini beberapa kali untuk membuat beberapa proses latar belakang: sed "s/Woo/woo/" < /dev/urandom >> /dev/null &. Lalu lakukan pkill -HUP sed. Anda akan membunuh semua contoh sed yang Anda mulai ditambah contoh lain yang melakukan pekerjaan yang bermanfaat.
ahcox
@ Caleb Selain itu, pkilljuga akan membunuh beberapa aplikasi yang tidak Anda harapkan: misalnya jika Anda telah chromiummenjalankan, dan ingin membunuh program yang disebut rom, pkillakan dengan senang hati menembak chromiumjatuh. Penggunaan yang lebih baik killall, yang hanya akan cocok dengan nama persis (tidak pada Solaris, di mana ia benar - benar membunuh semua proses ).
Ruslan
@Ruslan Atau gunakan pkill -xuntuk mendapatkan kecocokan tepat dan bukan pencocokan sebagian. Saya pribadi memanfaatkan pencocokan sebagian untuk menghemat pengetikan, tetapi Anda harus tahu apa yang dilakukan alat ini. Ya, secara default cocok dengan string sebagian. Opsi lain yang bermanfaat adalah -fmencocokkan dengan baris perintah penuh, bukan hanya $0.
Caleb
5

Anda mungkin ingin mencoba:

kill -TERM <pid>

atau

kill -TERM `pidof <application_name>`

Setidaknya pada beberapa sistem, ketika sistem sedang mengalami shutdown, semua proses dapat mengirim sinyal TERM (15) sebelum mereka mengirim sinyal KILL (9). HUP seringkali hanya menyebabkan aplikasi memuat ulang konfigurasi, tetapi bisa berbeda berdasarkan proses-demi-proses.

Dave
sumber
2

Tidak ada cara umum untuk memberi tahu aplikasi untuk keluar dan menyimpan konfigurasinya. Mungkin ada cara untuk memberi tahu aplikasi menggunakan kerangka kerja tertentu, misalnya dcop kfoo MainApplication-Interface quituntuk beberapa aplikasi KDE 3. Harap diingat bahwa aplikasi mungkin menampilkan kotak dialog yang meminta konfirmasi kepada Anda.

Jika tampilan X menjadi tidak dapat digunakan, bunuh server X. Tekan Ctrl+ Alt+ BackSpace; jika itu tidak berhasil, matikan proses X server dengan sudo pkill -x Xorg. Ketika server X mati, semua aplikasi X diberitahu dan mereka akan mencoba untuk keluar dengan anggun (tidak ada jaminan bahwa mereka akan menyimpan semuanya, tapi itu taruhan terbaik Anda).

Gilles 'SANGAT berhenti menjadi jahat'
sumber
Saya tidak tahu apakah aplikasi akan diberitahu atau baru saja dibunuh; dan karena kombo kunci tidak diaktifkan secara default di Fedora ..... Saya sekarang tahu bagaimana cara membunuhnya dengan command line!
jfk
1

Bersamaan dengan jawaban @ andcoz, jika Anda tidak tahu PID aplikasi (saya berasumsi Anda tidak mengetahuinya dengan keras), coba ini:

kill -HUP `pidof [application_name]`
n0pe
sumber
2
Ambillah satu langkah lebih maju dan coba pkill -HUP [application_name]:)
Caleb
Baru belajar pkill dan pgrep: D
jfk
1

Dua perintah lain yang mungkin ingin Anda pertimbangkan adalah wmctrl -cdan xdotool windowkill. Saya tidak yakin apakah windowkillpersis apa yang Anda cari, jika tidak, Anda mungkin tertarik pada windowdeletetambalan itu.

Jamie Kitson
sumber