为什么 lsusb 需要这么长时间?

为什么 lsusb 需要这么长时间?

我跑了lsusb好几次,但要花很长时间才能回来。它无法完成或运行缓慢是否有原因?

我已经尝试过kill查看他们的 PID,但是没有用。因此,我关闭正在运行的 gnome 终端选项卡,其 tty 变为?

$ 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

如果我是对的,D这意味着该进程正在被终止?为什么还挂着?

dmesg一直说

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

我的内部无线网络适配器无法工作,因此我插入了外部无线网络适配器(也无法工作)。

答案1

如果我是对的,D 意味着进程正在被终止?

不,这意味着该过程处于不间断的睡眠。有时,如果“睡眠”是内核忙循环等待 I/O,这可能会产生很大问题;这样的过程可能会让系统陷入瘫痪,而且我们无能为力,因为你不能杀死他们。然而,它也可能是相对被动的(尽管你仍然无法杀死它们)。

这样做的原因是一种妥协,基于这样的事实:在正常情况下,这种情况永远不会发生,或者在很长一段时间内永远不会发生。它表明硬件出现故障,或者可能是内核/驱动程序错误。 “妥协”是这样做使得系统较少的容易出错(在正常情况下),并且通常不是问题,因为应用程序,无论编写得多么糟糕,或者最终用户多么愚蠢,无论多么一心想要破坏,不能创造它。这仅有的发生这种情况的原因是硬件故障或内核错误。

换句话说,在这种情况下终止这样的进程将导致在正常使用过程中出现其他问题的更大风险。因此,当它确实发生时你无能为力,这是一个合乎逻辑的权衡。

答案2

lsusb使用系统调用从 USB 总线读取硬件信息。如果您的 USB 总线配置不正确或者有一个设备无法回复,系统调用将阻塞直到超时。也许您应该一次插入一个 USB 设备,并lsusb每次发出命令来找出哪个设备(或设备组合)造成了问题。

信号在不间断的系统调用期间被阻止,这就是为什么终止进程(发送 SIGKILL)或关闭其终端(发送 SIGHUP)不会终止进程。如果lsusb进程在不可中断的系统调用中无限期地阻塞,则实际上没有办法杀死它。

相关内容