Bagaimana saya bisa hibernasi aplikasi yang sedang berjalan?

15

Contoh use case:

Saya menjalankan Chromium dengan beberapa tab terbuka dan memutuskan bahwa saya tidak perlu mengakses aplikasi selama 20 menit berikutnya. Untuk menghemat waktu baterai laptop, saya ingin menghibernasi (membekukan) Chromium tanpa harus menutup aplikasi (membuka kembali dan memuat ulang semua tab memerlukan waktu yang ingin saya simpan dengan hibernasi).

orschiro
sumber
1
Periksa jawaban kedua di sini: stackoverflow.com/questions/2134771/… . Masalahnya adalah bahwa kromium menggunakan banyak PID dan itu berbeda setiap kali Anda membukanya ... tetapi menghentikan yang utama (yang memiliki ikon asli dalam proses manajer) tampaknya berfungsi dengan baik.
GreggD
1
Jika Anda hanya peduli tentang Chromium dan bukan aplikasi lain, Anda bisa menggunakan Ekstensi Chromium yang dirancang untuk manajemen tab, seperti OneTab atau Session Buddy .
Moshe Katz
Terima kasih tetapi saya menemukan killallsolusinya benar-benar sangat elegan. :)
orschiro

Jawaban:

21

Anda dapat menggunakan killallperintah untuk mengirim SIGSTOPsinyal ke semua proses yang cocok dengan nama yang diberikan untuk membekukannya dan kemudian mengirim SIGCONTcara yang sama untuk mencairkannya lagi.

Pertama cari tahu nama proses menggunakan pgrep -l SEARCH_PATTERN:

$ pgrep -l chrom
13010 chromium-browse
13036 chromium-browse
13038 chromium-browse
13153 chromium-browse
13166 chromium-browse
13169 chromium-browse
13175 chromium-browse
13187 chromium-browse
13195 chromium-browse
13206 chromium-browse

Perhatikan bahwa itu akan memangkas nama-nama panjang, oleh karena ritu hilang. Tapi ini bukan masalah karena Anda bisa menggunakan Tabpenyelesaian untuk memasukkan nama proses yang akan menyelesaikannya secara otomatis.

Kemudian Anda mengirim SIGSTOPsinyal ke semua proses yang dinamai chromium-browserseperti ini:

$ killall -s STOP chromium-browser 

Jendela Chromium akan berwarna abu-abu seolah menjadi tidak responsif. Yah, itu benar-benar menjadi tidak responsif, jadi itu sudah diduga. Anda tidak dapat berinteraksi dengan jendela dengan cara apa pun sekarang (kecuali untuk bilah menu dan meminimalkan dll. Yang ditangani oleh manajer jendela dan bukan aplikasi itu sendiri). Tetapi acara dari mengklik tombol dll. Masih dihasilkan dan ditambahkan ke antrian acara aplikasi, sehingga semuanya akan diproses sekaligus ketika Anda mencairkan aplikasi lagi!

Anda mencairkan aplikasi lagi dengan hanya menjalankan perintah ini yang mengirimkan SIGCONTsinyal ke proses yang ditentukan:

$ killall -s CONT chromium-browser 

Terkadang membekukan aplikasi dengan cara ini dapat menyebabkannya macet, jadi pastikan barang-barang penting disimpan sebelum membekukan aplikasi.

Dalam kasus yang jarang terjadi bahkan lingkungan desktop / palungan jendela / apa pun yang mungkin menjadi tidak responsif juga. Dalam hal ini Anda harus mencairkan aplikasi yang dibekukan melalui TTY:

Tekan Ctrl+ Alt+ F1untuk beralih ke TTY1. Anda akan diminta untuk masuk, jadi masukkan nama pengguna dan kata sandi Anda. Kemudian jalankan perintah untuk mencairkan aplikasi dengan cara yang sama Anda akan menjalankannya melalui emulator terminal normal Anda. Setelah itu beralih kembali ke desktop (TTY7) menggunakan Ctrl+ Alt+ F7dan Anda akan baik-baik saja.

Komandan Byte
sumber
4
Sejak Anda mulai pgrep, Anda bisa melanjutkan denganpkill
muru
1
Meskipun risiko aplikasi mogok dari SIGSTOPada, saya akan mengatakan itu kecil. Saya sering menggunakannya di Chromium, dan saya tidak ingat pernah menjadi alasan kecelakaan.
kasperd
Saya telah belajar smtg baru! killall! ;-)
Fabby
8

Untuk menangguhkan, coba: killall -SIGTSTP chromium-browser

Jika ini tidak berhasil, cobalah versi kuat: killall -SIGSTOP chromium-browser.

Either way, untuk terus digunakan killall -SIGCONT chromium-browser. Saya mencoba dengan Firefox dan berhasil. Namun perlu diperhatikan, bahwa jika Anda mengeklik tombol di Chromium saat ditangguhkan, ia akan menjalankan hal itu setelah Anda melanjutkan eksekusi.

clocktown
sumber
3
SIGSTOP / SIGCONT berfungsi untuk saya, hanya perlu memasukkan chromium-browsernama proses. +1
GreggD
1
Atau google-chromejika Anda menggunakan Google Chrome, karena perbedaannya tampaknya membingungkan
cat
2

Anda dapat mencoba yang berikut (di Terminal):

ps aux | grep gedit

Maka Anda akan melihat sesuatu seperti ini:

barend    7166  5.3  1.0 722620 39044 ?        Sl   16:19   0:00 gedit

Tuliskan nomor 7166 (atau nomor apa pun itu) dan kemudian lakukan:

kill -STOP 7166

Itu akan menunda eksekusi proses. Ini tidak akan segera membebaskan memori yang digunakan olehnya, tetapi memori akan tersedia untuk proses lain jika mereka membutuhkannya.

Lalu lakukan

kill -CONT 7166 untuk bekerja dengan program ini lagi.

Perhatikan bahwa Anda harus mengubah 7166 jika perlu.

grooveplex
sumber