lsof "$(tty)"
faz o que você pede, listando o que tem seu terminal aberto para leitura ou gravação.
Você pode verificar o que foi gravado em seu terminal se ainda tiver seu terminal aberto, o que geralmente é o caso, pelo menos se ele ainda estiver em execução. É possível que ele tenha enviado uma mensagem de erro para o seu terminal, fechou o descritor de arquivo para ele, mas continuou rodando. Mas o motivo mais provável de você não conseguir verificar é se o processo em si é executado apenas de forma intermitente.
-
jobs
mostra seu jobs de fundo . Se você executou o processo com&
, ele é executado de forma assíncrona-- ou suspende-o com Ctrl + Z - e ele ainda está em execução, então ojobs
builtin mostrará a menos que você tenhadisown
ed. - Caso isso não seja suficiente,
lsof "$(tty)"
listará tudo o que tiver seu terminal aberto para leitura ou gravação . Isso funciona mesmo no caso raro de algo que grava no seu terminal sem ter sido iniciado ou descido de algum outro processo que foi. - Mas, para sua situação específica, recomendo que você leia a parte no final desta resposta que corrige essa mensagem de erro.
É possível que você tenha muitos programas gráficos com seu terminal aberto para gravação:
- Isso pode acontecer se você estiver executando uma parte importante do seu ambiente de área de trabalho (que inicia muitos outros programas) em seu terminal, como o Unity ou outro shell gráfico.
- Em particular, se você tiver executado um comando como
unity --replace &
do seu terminal, isso explicaria erros inesperados de aplicativos que aparecem nele . - Então, se seu objetivo é silenciar as mensagens, você não deve executá-lo ou executá-lo de maneira diferente (ou de um terminal diferente). A melhor abordagem depende do motivo pelo qual você está executando.
- Você pode executar
pstree
para ver seu process tree , que pode ajudar.
Seu dispositivo de terminal é um "arquivo" e você pode passar o nome do arquivo para lsof
.
Você pode obter uma lista de processos que possuem o terminal atual - o terminal no qual você executa o comando - aberto para leitura ou gravação, passando o caminho para seu nome do dispositivo para o lsof
comando. Como tty
produz esse caminho, você pode executá-lo e executar lsof
com o que mostra, ou você pode usar qualquer um dos seguintes:
lsof "$(tty)" # "$(tty)" may expand to /dev/tty1, /dev/pts/0, /dev/pts/1, etc.
lsof $(tty) # bad form, but device names rarely have whitespace/globbing characters
lsof 'tty' # same as above, just with the old disfavored backtick syntax
lsof /proc/$$/fd/1 # the shell expands $$ to its own process ID (fd/0, fd/1, or fd/2 work)
A saída normalmente será parecida com essa, se os únicos programas que você está executando no seu terminal forem o seu shell e - é claro - lsof
em si:
lsof: WARNING: can't stat() tracefs file system /sys/kernel/debug/tracing
Output information may be incomplete.
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 27763 ek 0u CHR 136,0 0t0 3 /dev/pts/0
bash 27763 ek 1u CHR 136,0 0t0 3 /dev/pts/0
bash 27763 ek 2u CHR 136,0 0t0 3 /dev/pts/0
bash 27763 ek 255u CHR 136,0 0t0 3 /dev/pts/0
lsof 29311 ek 0u CHR 136,0 0t0 3 /dev/pts/0
lsof 29311 ek 1u CHR 136,0 0t0 3 /dev/pts/0
lsof 29311 ek 2u CHR 136,0 0t0 3 /dev/pts/0
Se você tiver mais coisas em execução que leiam ou gravem no seu terminal, elas devem ser exibidas. Note que os comandos mostrados acima devem ser executados a partir do terminal onde você vê as mensagens irritantes . Você pode fazer isso a partir de um terminal separado também, mas você deve fornecer lsof
um caminho para o terminal em que está interessado. Por exemplo, você pode executar tty
no terminal que deseja conhecer e usar o caminho mostra como o argumento para lsof
no terminal do qual você deseja executá-lo.
Com relação ao acesso e às permissões, você pode estar se perguntando:
- O aviso
tracefs
pode ou não aparecer para você. De qualquer maneira, você provavelmente não precisa se preocupar . Normalmente, é do sistema de arquivos de depuração que está completamente indisponível em vez de ficar restrito a você, então ... - É possível que você se beneficiaria da execução de
lsof
como root comsudo
, mas provavelmente não. Normalmente, você pode visualizar informações sobre todos os processos e, mesmo que seu sistema esteja configurado para não permitir isso, o que estiver fazendo isso provavelmente está sendo executado como você, de qualquer maneira.
Alguns processos aparecem mais de uma vez, porque eles têm seu terminal aberto mais de uma vez . Eu realmente não recomendo tentar mostrar apenas processos que têm o seu terminal aberto para escrever , porque:
- Quando o mesmo processo aparece várias vezes, elas são mostradas juntas, portanto, as entradas extras não devem ser confusas.
- É raro qualquer coisa, mas o seu shell e os programas que você executa são leitura do seu terminal.Geralmente, você pode visualizá-los com
jobs
, o que dá uma linha (ou menos) por processo. Se você estiver usandolsof
, deseja detalhes. - Os processos que aparecem apenas uma vez têm seu terminal aberto apenas para gravação (ou apenas para leitura), e esses são de interesse especial.
Um exemplo lsof
: cat
ing de um terminal para outro.
Você não precisa fazer isso - é realmente apenas uma demonstração. Esta seção existe apenas porque:
- Você pode ver nada que explique seu problema na saída de
lsof
e queira algum tipo de confirmação de que ele realmente está mostrando processos que gravam em seu terminal, mesmo que eles não tenham sido iniciados a partir dele. - Você pode estar interessado em saber como isso funciona e tentar testá-lo em uma situação que você controla.
- Outros leitores que estão interessados neste tópico por diferentes razões podem querer mais explicações do que aparece na seção anterior, para que possam descobrir como usar isso para resolver seus próprios problemas diferentes.
Se você acabou de executar tty
no seu terminal, por si só, ele imprime o caminho para o nó do dispositivo do seu terminal:
ek@Io:~$ tty
/dev/pts/0
Isso nem sempre será /dev/pts/0
. Você pode abrir outro terminal e executar tty
e o caminho será diferente. Vá em frente e faça isso.
No segundo terminal, execute cat
, mas redirecione sua saída para o primeiro terminal. Para fazer isso, execute isso, mas substitua /dev/pts/0
pelo que tty
mostrou quando você o executou no primeiro terminal:
cat >/dev/pts/0
Digite o texto no segundo terminal e pressione Enter . Ele aparecerá no seu primeiro terminal.
No primeiro terminal, execute qualquer um dos comandos lsof
mostrados acima.
ek@Io:~$ lsof "$(tty)"
lsof: WARNING: can't stat() tracefs file system /sys/kernel/debug/tracing
Output information may be incomplete.
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 27763 ek 0u CHR 136,0 0t0 3 /dev/pts/0
bash 27763 ek 1u CHR 136,0 0t0 3 /dev/pts/0
bash 27763 ek 2u CHR 136,0 0t0 3 /dev/pts/0
bash 27763 ek 255u CHR 136,0 0t0 3 /dev/pts/0
cat 29476 ek 1w CHR 136,0 0t0 3 /dev/pts/0
lsof 29479 ek 0u CHR 136,0 0t0 3 /dev/pts/0
lsof 29479 ek 1u CHR 136,0 0t0 3 /dev/pts/0
lsof 29479 ek 2u CHR 136,0 0t0 3 /dev/pts/0
Seu terminal não destacará a linha com cat
- eu acabei de fazer isso para mostrar a diferença.
(No segundo terminal onde cat
está rodando, você pode sair pressionando Ctrl + D no início de uma linha, ou apenas pressionando < kbd> Ctrl + C. Se você digitar texto em uma linha e pressionar Ctrl + D , isso irá liberar a entrada buffer, mesmo que você não tenha pressionado Enter , e você verá o texto no primeiro terminal.)
Depuração de erros "Falha ao abrir o backend do VDPAU"
Embora seja uma resposta geral para a questão de como encontrar o que está sendo escrito em seu terminal e isso pode ajudá-lo, há outras abordagens que você deve considerar para o problema específico que você descreveu aqui. Além das mensagens do kernel em consoles virtuais - o que não é - mensagens mostradas no seu terminal geralmente vêm de algum programa que você executou do seu terminal, ou algum programa que um desses esses programas foi executado, etc.
Como a resposta do NickTh diz, se você não estiver executando manualmente nada do seu terminal que parece que poderia produzir essas mensagens, verifique os arquivos em que seu shell pode executar comandos quando for iniciado , especialmente .profile
e .bashrc
(como NickTh menciona ) porque esses são aqueles que você provavelmente modificou.
O erro que você está vendo provavelmente não é um bug no próprio MPlayer, mas sim em uma biblioteca que ele usa, que é usada por muitos outros programas. Se você está rodando qualquer programas gráficos do seu terminal - especialmente se você os colocou em segundo plano com &
, então eles rodam de forma assíncrona com o seu shell - então um ou mais deles é quase certamente a razão pela qual você está vendo essas mensagens. Os navegadores da Web são particularmente propensos a produzi-los, principalmente porque eles podem executar plug-ins, como o Adobe Flash, que usam a biblioteca afetada.
Existem vários bugs relatados no Launchpad sobre mensagens de erro como esta. O Bug 808254 é particularmente semelhante ao que você descreveu. O Bug 1300215 é especialmente proeminente, embora envolva um driver de vídeo da Intel. Você pode pesquisar no Launchpad pelo texto da mensagem para encontrar mais bugs. Você pode encontrar soluções alternativas - seja apenas para silenciar as mensagens ou para fazer mais sobre o bug - em tais relatórios de bugs e seus comentários. Além disso, enquanto a outra pergunta linkado em a resposta do NickTh é sobre o problema é que ele ocorre no MPlayer e tem várias soluções alternativas específicas do MPlayer como respostas, a resposta atualmente mais votada não é específica do MPlayer e pode funcionar para você.
Se você estiver executando muitos programas do seu terminal, você pode ter visto muitas entradas na saída de lsof
(se você decidiu usar esse método na solução de problemas). Uma maneira de descobrir qual programa está produzindo a saída é executar seus programas a partir de terminais separados. Isso funciona mesmo se seus terminais separados forem iniciados uns dos outros - um emulador de terminal GUI como o GNOME Terminal não passa as mensagens de erro ou outro texto que ele exibe até o terminal a partir do qual foi executado (se houver). Da mesma forma, uma maneira de deixar de ser incomodado por esse problema - supondo que as mensagens irritantes são o único problema real - é não executar as coisas do seu terminal que você não quer saída no seu terminal. Normalmente você pode conseguir isso usando seus menus gráficos. Mas, por favor, veja o topo desta resposta para saber por que você pode estar executando mais do seu terminal do que você precisa ou pretende.