Czy takie zachowanie VLC jest normalne?

11

Jestem na najnowszej aktualizacji Ubuntu 16.04 Unity, mam jeden z najlepszych laptopów do gier Asus na rynku, VLC jest zainstalowany, ale nigdy go nie używam.

Przez ostatnie kilka miesięcy nie byłem w stanie wyłączyć mojego komputera, za każdym razem, gdy próbuję to zrobić, fani zaczynają wirować tak szybko i zawiesza się, więc po prostu nacisnąłem przycisk zamykania, ten problem był tylko podczas zamykania , nie restartuj Nawet nie próbowałem rozwiązać problemu.

Dzisiaj, kiedy pracowałem, zauważyłem, że fani robią to samo, co zwykle robią podczas zamykania. Uruchomiłem topzauważyłem 2 wystąpienia VLC uruchamiane pod moją nazwą użytkownika, zużywające około 122% procesora każda, chociaż znowu nie używam VLC i nie używam żadnego programu, który opiera się na VLC.

Próbowałem sudo kill <pid>i sudo killall <pid>a sudo killall vlcjednak nadal nie zginęło, że nigdy nie zdarzyło mi się wcześniej. Zabiłem ich z monitora zasobów Ubuntu, zostali zabici, problem zamknięcia został naprawiony i wszystko wróciło do normy.

Czy zdarzyło się to wcześniej?

Lynob
źródło
Cześć, Lynob, właśnie zaktualizowałem skrypt w odpowiedzi, aby był zgodny z crontabem, który domyślnie działa z ograniczoną liczbą zmiennych środowiskowych ... Teraz, zgodnie z moimi testami, skrypt działa zgodnie z oczekiwaniami.
pa4080
2
Jeśli chcesz dowiedzieć się, dlaczego tak się dzieje, możesz uruchomić ps aux | grep " $(echo -n $(pgrep vlc | xargs ps -o ppid | tail -n +2 | tr -d ' ') | sed 's/ / \\| /g') "następnym razem. Spowoduje to znalezienie wszystkich uruchomionych instancji VLC, uzyskanie nadrzędnych identyfikatorów PID dla każdego z nich, a następnie wyszukanie nadrzędnych identyfikatorów PID na wyjściu ps aux. Może to pomóc w wyśledzeniu problemu.
anonimowy,
3
Dla przypomnienia, sudo kill -9 <pid>prawdopodobnie działałoby tam, gdzie po prostu killnie działało . Te -9środki „Zabij że coś porusza się, ze skrajnej uszczerbku, w najbardziej makabryczne możliwy sposób”. Niewiele może to przetrwać. Bez -9tego jest bardziej jak „Proszę umrzeć? Proszę, proszę bardzo z wiśnią na wierzchu?”
trysis
1
@trysis: Uważaj kill -9, to niebezpieczne. Jeśli na przykład aplikacja utworzyła plik tymczasowy /var/lock, nie zostanie on usunięty. Podobnie bufory nie zostaną opróżnione, transakcje w bazie danych nie zostaną zatwierdzone itp. Możesz skończyć z uszkodzonymi lub brakującymi danymi, jeśli cokolwiek zostanie zapisane w dowolnym miejscu. VLC prawdopodobnie nie robi żadnej z tych rzeczy, ale zalecałbym próbę zrozumienia problemu przed założeniem.
Kevin
1
BTW, 99% problemów, które miałem z zawieszaniem się VLC i robieniem innych „dziwnych rzeczy” było spowodowane próbą użycia akceleracji sprzętowej do dekodowania wideo lub użyciem „niewłaściwego” (cokolwiek to może oznaczać) zaplecza wideo; Spróbowałbym się tym bawić (wyłączyć przyspieszanie HW dla kodeków, spróbować zmienić backend wyjścia wideo) i sprawdzić, czy coś dobrego z tego wynika.
Matteo Italia

Odpowiedzi:

10

Mam podobny problem z odtwarzaczem VLC. Ale różnica polega na tym, że często go używam. Oto jedno możliwe (nie w pełni sprawdzone) obejście tego problemu w systemie Ubuntu 16.04 z Unity.

Zgodnie z tą odpowiedzią możemy przetestować, czy istnieje uruchomiony plik pulpitu aplikacji vlc. Jeśli nie ma nikogo, możemy spróbować zabić wszystkie procesy VLC. W tym celu utwórz plik wykonywalny o nazwie ~/bin/vlc-killer.shi dodaj następujące wiersze jako jego zawartość (tutaj jest odniesienie do wyeksportowanych envvars):

#!/bin/bash

# Check whether the user is logged-in: if not then exit
if [[ -z "$(pgrep gnome-session -n -U $UID)" ]]; then exit; fi

# Export the current desktop session environment variables
export $(xargs -0 -a "/proc/$(pgrep gnome-session -n -U $UID)/environ")

# Test whether there is any VLC RunningApplicationsDesktopFile
/usr/bin/qdbus org.ayatana.bamf /org/ayatana/bamf/matcher \
org.ayatana.bamf.matcher.RunningApplicationsDesktopFiles | grep -q 'vlc'

# If not killall VLC processes
if [[ $? -ne 0 ]]; then /usr/bin/killall vlc; fi

Następnie otwórz Crontab użytkownika do edycji ( crontab -e) i zastosuj następujące zadanie (które co minutę wykona nasz skrypt) na dole:

* * * * * $HOME/bin/vlc-killer.sh >/dev/null 2>&1
pa4080
źródło
1
Jeśli mam rację, działa to tylko wtedy, gdy przynajmniej jedna instancja vlczostała uruchomiona przez GUI. Jeśli jesteś przyzwyczajony do uruchamiania vlc movie.mpgwyłącznie z linii poleceń (tak jak ja), vlcproces ten zabije po minucie. Jednak fajne rozwiązanie i tak czy inaczej +1.
PerlDuck
2
@PerlDuck, podczas gdy aktywna jest „ikona” VLC (w programie uruchamiającym Dash ), skrypt działa, bez względu na to, czy VLC jest uruchamiane przez plik .desktop czy przez CLI.
pa4080
1
Fajnie. Nie byłam tego świadoma.
PerlDuck