Por que o lsusb está demorando tanto?

5

Estou executando lsusb várias vezes, mas está demorando muito para retornar. Existe uma razão pela qual não terminará ou que corre devagar?

Eu tentei kill ing seus PIDs, mas isso não funciona. Então eu fecho a aba terminal do gnome onde um está rodando, e seu tty se torna ? :

$ ps aux | grep -i lsusb
t        13845  0.0  0.0  40000  3788 pts/21   D    14:59   0:00 lsusb
t        14216  0.0  0.0  40000  3812 pts/21   D+   15:06   0:00 lsusb
t        14236  0.0  0.0  40000  3792 ?        D    15:06   0:00 lsusb

Se eu estiver correto, D significa que o processo está sendo morto? Por que ainda está pendurado?

dmesg continuou dizendo

[384722.320066] unregister_netdevice: waiting for wlan1 to become free. Usage count = 1 (repeated 77 times)

Meu adaptador de rede sem fio interno não funciona, então eu conecto um externo (que também não funciona).

    
por Tim 20.04.2015 / 21:22

2 respostas

5

If I am correct, D means the process is being killed?

Não, isso significa que o processo está em um sono ininterrupto . Às vezes isso pode ser muito problemático se o "sleep" for o loop ocupado do kernel aguardando a E / S; tais processos podem atrapalhar o sistema e não há muito que possa ser feito, porque você não pode matá-los . No entanto, também pode ser relativamente passivo (embora você ainda não possa matá-los).

A razão para isso é uma espécie de compromisso baseado no fato de que, em circunstâncias normais, isso nunca deveria acontecer, ou nunca aconteceria por um período significativo de tempo. Indica hardware com defeito ou, possivelmente, um erro de kernel / driver. O "compromisso" é que fazer as coisas desta maneira torna o sistema menos propenso a erros (em circunstâncias normais), e geralmente não é um problema porque uma aplicação, não importa o quão mal escrita, ou uma bobagem usuário final, não importa o quanto se dedique à destruição, não pode criá-lo. O modo somente que pode acontecer é devido a falhas de hardware ou bugs do kernel.

Em outras palavras, possibilitar a eliminação desse processo em tais circunstâncias criaria um risco maior de outros problemas durante o uso normal. Então o fato de você não poder fazer nada sobre isso quando isso acontece é uma troca lógica.

    
por 20.04.2015 / 21:37
2

lsusb usa syscalls para ler informações de hardware do barramento USB. Se o seu barramento USB não estiver configurado corretamente ou houver um dispositivo que não responderá, o syscall bloqueará até o tempo limite. Talvez você deva conectar um dispositivo USB de cada vez e emitir o comando lsusb a cada vez para descobrir qual dispositivo (ou combinação de dispositivos) está causando problemas.

Os sinais são bloqueados durante o syscalls e é por isso que matar o processo (enviar SIGKILL) ou fechar seu terminal (enviar SIGHUP) não encerra o processo. Se lsusb processa blocos indefinidamente em um syscall, não há como eliminá-la.

    
por 20.04.2015 / 21:33

Tags