2

在典型的 Linux shell 中,您可以使用Ctrl+c来停止执行命令。如果您已经开始运行使用通配符(例如 *)来查找具有特定模式的所有文件,并且如果您有很多文件需要搜索,那么 shell 可能需要很长时间才能将通配符扩展为实际的文件名。同时 Ctrl+c 不会停止 shell。Shell 继续解析通配符。Ctrl+c 只有在 shell 解析通配符后才会生效,这可能需要相当长的时间。

有没有办法在尝试扩展通配符时停止 shell?

这是在GNU bash, version 4.1.5(1)-release (x86_64-pc-linux-gnu).

4

2 回答 2

2

如果 shell 似乎花费了非常长的时间来扩展通配符,那么您很可能会发生以下情况之一:

  1. 你正在做类似的事情*/*/*/*/*/*- 解决方案:不要那样做;找到一种方法将你正在做的事情分解成更小的部分,或者至少更有效地处理它
  2. 您的目录中有大量文件 - 解决方案:不要这样做;目录中有太多文件是许多文件系统上众所周知的性能杀手(尽管有些处理它比其他更好)
  3. 您的文件系统要么是网络链接上的网络文件系统(NFS、Samba/CIFS、sshfs 等),速度有点慢,要么是 CD/DVD 之类的慢速物理介质上。除了一次匹配更少的文件或等待它之外,这里没什么可做的。
  4. 您的文件系统通常很快,但它位于老化的硬盘驱动器上,该驱动器开始出现读/写错误,导致尝试重新定位扇区,这看起来像是大量超时。检查您的系统日志中是否有可怕的磁盘消息,如果是这种情况,请购买新磁盘并将数据转移到昨天。
  5. 应该还有其他...

与此同时,其他建议/评论/答案指出了在外壳挂起时杀死外壳的能力。

于 2013-01-24T21:26:59.483 回答
1

我想你可以杀死这个过程。Ctrl-z停止, ps aux | grep processname, 获取进程 ID, 然后kill processid.

于 2013-01-24T21:09:10.483 回答