Cara menutup aplikasi dari terminal dengan cara yang sama seperti keluar dengan benar

9

Biasanya ketika menjalankan aplikasi dalam lingkungan grafis, ketika saya ingin menutupnya saya klik Xdi sudut kiri atas jendela atau pergi ke File > Close.

Saya ingin kadang-kadang menutup program-program ini dari jarak jauh melalui ssh dari terminal menggunakan baris perintah, sekarang saya menggunakan killperintah tapi saya heran itu tidak sama dengan keluar dari aplikasi dengan benar dari dirinya sendiri.

Dari man killsinyal default tampaknya 15) SIGTERM, apakah sinyal ini akan memberi tahu aplikasi yang saya coba tutup untuk membersihkan, tutup file yang terbuka, simpan barang?

Apakah ada cara yang lebih baik jika saya ingin melakukannya dari terminal?

Mike
sumber
2
Terima kasih untuk bertanya! Saya belajar sesuatu yang pasti akan berguna di beberapa titik.
Oliphaunt - mengembalikan Monica

Jawaban:

9

Cara khas untuk menutup aplikasi dengan anggun adalah dengan menggunakan kill -TERM 1234, di mana 1234PID dari jendela. Masalahnya, bagaimanapun, adalah bahwa aplikasi grafis dirancang untuk mendengarkan sinyal spesifik dari X server itu sendiri, bukan mendengarkan TERMsinyal.

Itu berarti Anda akan memerlukan semacam agen di antara Anda dan server X untuk berkomunikasi bahwa Anda ingin mengirim sinyal yang sesuai. Anda tentu saja dapat menulis program C, namun ada wmctrlprogram yang sudah ada (tidak mengejutkan ditulis dalam C) yang melakukan hal itu.

Penggunaan wmctrlsederhana:

wmctrl -c :SELECT: # close window that will be selected with pointer
wmctrl -c :ACTIVE: # close currently active window
wmctrl -ic <numeric id> # close window with specific id in hex

Ini tidak diinstal secara default, jadi dapatkan sudo apt-get install wmctrl

Ada banyak kegunaan untuk wmctrljauh melampaui hanya menutup jendela, jadi tolong lihat lebih banyak jawaban saya dan Yakub Vlijm untuk contoh skrip di mana itu digunakan

Sergiy Kolodyazhnyy
sumber
2
Cukup tambahkan di sini yang wmctrl -lakan mencantumkan semua jendela dan memberikan id numerik dalam hex di kolom pertama. =)
Terrance
Terima kasih, berfungsi baik dengan sebagian besar aplikasi, tetapi dengan Deluge ada opsi Minimize to tray on closedan wmctrl -chanya akan menutup jendela, bukan aplikasi itu sendiri, itu akan tetap berjalan diminimalkan ke baki.
Mike
3

Saya pikir layak untuk ditambahkan yang wmctrl -xlakan menampilkan hasil seperti ini:

0x03000001 -1 google-chrome.google-chrome  dcentore-pc Rybak - Google Play Music - Google Chrome
0x04600006  0 speedcrunch.Speedcrunch  dcentore-pc SpeedCrunch

Di mana xpermintaan kelas jendela berada di output. Ini seringkali merupakan cara termudah untuk menutup program yang sama setiap saat. Kemudian, kami dapat menyediakan kelas jendela saat menutupnya:

wmctrl -xc speedcrunch.Speedcrunch

Contoh ini akan menutup speedcrunch.

Daniel Centore
sumber