Ubuntu kapanmada SIGTERM göndermiyor

18

Ubuntu'nun çalışan uygulamaları doğru şekilde bırakmalarını sağlamak için kapattığını söylemiyor ancak bunun yerine onları çıkmaya zorluyor.

Kapanma sırasında kromu açık bırakırsam, önyükleme işleminden sonra tekrar açtığımda son kez doğru şekilde kapanmadığını söylerseniz, LibreOffice bana belgemi kaydetmek isteyip istemediğimi sormaz ve ihtiyacım olan bir uygulama yapıyorum. çıkışta bazı kodları çalıştırın, ancak bilgisayar kapatıldığında bunu yapmaya izin verilmez.

Anladığım kadarıyla, SIGTERM ilk önce tüm süreçlere temiz bir şekilde çıkmalarını sağlamak için gönderilir ve eğer SIGKILL'den çıkmazlarsa bırakmaları için onları zorlamak üzere gönderilir. Görünüşe göre Ubuntu ya SIGTERM'i göndermiyor ya da SIGKILL göndermeden önce uygulamalara yeterince zaman vermiyor.

Bunu düzeltmem için bir yolu var mı?

Ubuntu'yu 16.04 çalıştırıyorum ama sorun 15.10'da da var. 15.10 en yeni sürüm olduğunda Ubuntu kullanmaya başladığımdan beri orada olup olmadığını anlayamıyorum.

Düzenleme: Unity'yi kullanıyorum ve bilgisayarı sağ üst köşedeki vitese basıp kapatmayı seçiyorum, ancak terminalde sudo halt çalıştırıyorsa sorun aynı olsa da.

Düzenle: Sadece çıkış yaparken aynı davranışı gözlemliyorum. Tahminimce, sinyalin çıkışta gönderilmesi gerekiyor ve bu nedenle sorun kapatma ve çıkışta ortaya çıkıyor.

    
sordu GKraft 13.06.2016 11:39

3 cevap

1

Ne yazık ki, bu şekilde pek işe yaramıyor. Aslında, bir sinyal işleyicisine sahip olan bu programların çoğu, onay iletişimini göstermek için sinyali engellemiyor. Sinyal kullanımı genellikle çok az veya eksik.

Kapatma yapmadan kolayca deneyebilirsiniz. Sadece SIGTERM'i çalışan Firefox veya LibreOffice işleminize gönderin:

$ pkill firefox

Normalde, Firefox gerçekten kapatmak isteyip istemediğinizi sorabilir. Ayrıca, özellikle uzun bir süre çalıştığı ve 1 GB'den fazla RAM kullandığı zaman, kapanması genellikle biraz zaman alır - bu işlem, son penceresi kapatıldıktan sonra işlemin sonlandırılması için bir dakika kadar zaman alır. SIGTERM'i gönderdiğinizde bunların hiçbiri olmaz, işlem hemen sonlandırılır.

Ancak, bazı masaüstü ortamları kapatılmadan önce tüm açık pencereleri kapatır. SIGTERM'den farklı olarak, bir pencereyi programatik olarak kapatmak, o pencerenin X düğmesine tıklayarak veya Alt + F4 şeklindedir. Bu, diğer cevaptaki betiğin de yaptığı şeydir - tüm açık pencereleri zarifçe kapatmak için wmctrl kullanır.

Bir pencere kapatıldığında, program acele olmaz ve bu pencere içindeki her şeyi kapatabilir, örneğin açık sekmeler, ve kaydedilmemiş çalışmalar varsa bir iletişim penceresi de gösterebilir. Bir uygulamanın tüm açık pencereleri kapatıldıktan sonra, işlem genellikle bundan kısa bir süre sonra sona erer.

Dolayısıyla, masaüstü ortamınıza bağlıdır (masaüstü ortamınızı kapatma ve sudo poweroff 'yi kullanmamanız varsayılmaktadır). Örneğin, KDE, MATE içermezken kapatılmadan önce açık pencerelerin kapatılmasını beklemelidir.

Alt çizgi: Kapatmadan önce tüm açık pencereleri manuel olarak kapatın. Veya tüm pencerelerin kapanmasını bekleyen bir masaüstü ortamı kullanın.

    
verilen cevap c0xc 02.08.2016 14:04
0

Değeri için, bir süre önce, Manjaro forumunda bu prosedürü buldum:

close_apps () {
WIN_IDs=$(wmctrl -l | grep -vwE "Desktop$|xfce4-panel$" | cut -f1 -d' ')
for i in $WIN_IDs; do wmctrl -ic "$i"; done

# Keep checking and waiting until all windows are closed
while [ "$WIN_IDs" != "" ]; do
        sleep 0.1;
        WIN_IDs=$(wmctrl -l | grep -vwE "Desktop$|xfce4-panel$" | cut -f1 -d' ')
done

}

Kapatmadan önce tüm açık uygulamaları kapatmak için kendi komut dosyanızda çağırabilirsiniz (veya yeniden başlat).

Var olan tek sorun, Xfce için yaratıldı, bu yüzden Unity DE'nin empoze ettiği değişikliklere ihtiyacı var. Birisinin daha bilgili birinden yardım etmesi, OP'nin problemini çözmeye yardımcı olmak için burada güzel bir şekilde ortaya çıkacaktır.

    
verilen cevap S.R. 28.06.2016 04:19
0

Aslında, tüm pencereleri kapatan ve herhangi bir belirli DE'ye bağlı olmayan bir komut parçası Sor'da bulunabilir. 2-ve 3-rd cevaplar özellikle kullanışlıdır. Sadece birkaç satır daha fazla ve masaüstünde veya masaüstünde bir başlatıcı oluşturarak, kullandığınız DE'de çalışan zarif bir kapatma gerçekleştirebilirsiniz.

Tüm açık pencereleri incelikle nasıl kapatılır

    
verilen cevap S.R. 12.08.2016 20:07

Etiketlerdeki diğer soruları oku