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

Tim*_*Tim 6 usb

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

我试过killing 他们的 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
Run Code Online (Sandbox Code Playgroud)

如果我是对的,是否D意味着进程正在被杀死?为什么还挂?

dmesg 一直说

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

我的内部无线网络适配器不起作用,所以我插入了一个外部适配器(也不起作用)。

gol*_*cks 5

如果我是对的,D 表示进程正在被杀死?

不,这意味着进程处于不间断睡眠状态。有时,如果“睡眠”是内核忙循环等待 I/O 时,这可能会很成问题;此类进程会使系统陷入停顿,并且无能为力,因为您无法杀死它们。但是,它也可能相对被动(尽管您仍然无法杀死它们)。

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

换句话说,在这种情况下可以终止这样的进程,因此在正常使用期间会产生更大的其他问题风险。因此,当它确实发生时您无能为力的事实是一个合乎逻辑的权衡。


Dmi*_*yev 3

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

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

  • 我并不是想说你错了(+1)——我也确信*不间断的*系统调用是问题所在——我只是想指出*“信号在系统调用期间被阻止”*应该'不要如此明确地措辞,因为许多/大多数系统调用**都**可以被信号中断。 (2认同)