Это поведение VLC нормально?

11

Я на Ubuntu 16.04 Unity установлены последние обновления, у меня один из лучших игровых ноутбуков Asus на рынке, VLC установлен, но я никогда не использую его.

В течение последних нескольких месяцев я не мог выключить свой компьютер, каждый раз, когда я пытаюсь это сделать, вентиляторы начинают вращаться так быстро, и он зависает, поэтому я просто нажимаю кнопку выключения, эта проблема была только при выключении , не перезапуск Я даже не удосужился попытаться решить проблему.

Сегодня, когда я работал, я заметил, что фанаты делают то же самое, что обычно делают во время выключения. Я topобнаружил, что 2 экземпляра vlc запускаются под моим именем пользователя, например, по 122% процессорного времени каждый, хотя опять же я не использую vlc и не использую программы, использующие vlc.

Я пытался sudo kill <pid>и, sudo killall <pid>и sudo killall vlcвсе же они не были убиты, что никогда не случалось со мной раньше. Я убил их из монитора ресурсов Ubuntu, они были убиты, проблема с выключением была исправлена, и все вернулось на круги своя.

Это случалось с кем-то раньше?

Lynob
источник
Привет, Lynob, я только что обновил скрипт в своем ответе таким образом, чтобы он был совместим с crontab, который по умолчанию работает с ограниченным числом переменных среды ... Теперь, согласно моим тестам, скрипт работает так, как ожидается.
pa4080
2
Если вам интересно узнать, почему это происходит, вы можете запустить в ps aux | grep " $(echo -n $(pgrep vlc | xargs ps -o ppid | tail -n +2 | tr -d ' ') | sed 's/ / \\| /g') "следующий раз, когда это произойдет. Это позволит найти все запущенные экземпляры VLC, получить родительские PID для каждого из них, а затем выполнить поиск родительских PID в выходных данных ps aux. Это может помочь отследить проблему.
анонимно
3
Для записи, sudo kill -9 <pid>вероятно, работал бы там, где просто killнет. Это -9означает: «Убей все, что движется с предубеждением самым отвратительным образом». Не так много может пережить это. Без -9, это больше похоже на «Пожалуйста, умри? Пожалуйста, пожалуйста, с вишней на вершине?»
trysis
1
@trysis: будь осторожен kill -9, это опасно. Например, если приложение создало временный файл /var/lock, оно не будет удалено. Аналогично, буферы не будут сброшены, транзакции с базой данных не будут зафиксированы и т. Д. Вы можете получить поврежденные или отсутствующие данные, если что-нибудь было записано. VLC, вероятно, не делает ничего из этого, но я бы порекомендовал попытаться разобраться в проблеме, прежде чем предполагать.
Кевин
1
Кстати, 99% проблем, которые у меня были с зависанием VLC и другими «странными вещами», были связаны с попыткой использовать аппаратное ускорение для декодирования видео или с использованием «неправильного» (что бы это ни значило) видео-интерфейса; Я попытался бы поиграться с этим (отключить ускорение HW для кодеков, попытаться изменить выходной видеосигнал) и посмотреть, получится ли из этого что-нибудь хорошее.
Маттео Италия

Ответы:

10

Я испытываю подобную проблему с плеером VLC. Но разница в том, что я часто этим пользуюсь. Вот один из возможных (не полностью проверенных) способов решения этой проблемы в Ubuntu 16.04 с Unity.

В соответствии с этим ответом мы можем проверить, существует ли файл рабочего стола запущенного приложения с именем vlcили около того. Если нет никого, мы можем попытаться уничтожить все процессы VLC. Для этого создайте исполняемый файл с именем ~/bin/vlc-killer.shи добавьте следующие строки в качестве его содержимого (здесь приведена ссылка на экспортированные 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

Затем откройте пользовательский Crontab для edit ( crontab -e) и примените следующее задание (которое будет выполнять наш скрипт каждую минуту) внизу:

* * * * * $HOME/bin/vlc-killer.sh >/dev/null 2>&1
pa4080
источник
1
Если я прав, это работает только тогда, когда хотя бы один экземпляр vlcбыл запущен через графический интерфейс. Если вы привыкли запускаться vlc movie.mpgисключительно из командной строки (как я), это убьет vlcпроцесс через минуту. Тем не менее, хорошее решение и +1 в любом случае.
PerlDuck
2
@PerlDuck, хотя активная «иконка» VLC (в панели запуска Dash ) работает, независимо от того, запускается ли VLC файл .desktop или CLI.
pa4080
1
О, круто. Я не знал об этом.
PerlDuck