& 用于在后台运行命令

& 用于在后台运行命令

当我跑步时

$ ls -R / & 

虽然&(应该将进程降级到后台)我最终不得不坐下来完成我的系统的整个列表。按 CTRL+C 或 CTRL+Z 没有帮助。我究竟做错了什么?

答案1

当您ls -R /在后台启动时,该命令会立即启动,并将控制权交还给调用 shell(您的交互式 shell)。但是,标准输出流和标准错误流ls仍然连接到终端,因此这就是您在终端中看到命令输出的原因。

在评论中您提出一个后续问题,表明您知道可以将命令的输出重定向到以/dev/null避免将其流式传输到终端:

ls -R / >/dev/null 2>&1 &

后续问题是“为什么Exit 1当我使用jobs -l.

您会得到一个非零退出状态,ls因为它没有完全成功运行。事实并非如此,因为您尝试对整个系统上的所有文件进行递归列表,并且您用来运行命令的用户可能无法读取系统上的某些目录。如果您没有将标准错误流重定向到/dev/null(通过2>&1从命令行中删除),您可能会在终端中看到错误。

相关内容