You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于Linux中执行last | reboot导致机器重启的原因及管道工作原理的问询

解答你的两个问题

1. 为什么last | reboot会导致机器重启?

你大概率是把reboot当成了类似grep的过滤工具,但实际上reboot是个系统管理命令——它的核心功能就是触发系统重启,不管有没有接收到输入,只要这个命令被执行,就会调用内核接口直接重启机器。

在last | reboot这条命令里,shell会同时启动两个独立进程:last和reboot。last确实会输出系统的登录/重启历史,但reboot根本不会去读取这些输入,它一启动就直奔本职工作:重启系统。所以机器重启的本质就是你运行了reboot命令,管道只是让last和reboot同时启动,但完全不影响reboot的核心行为。

2. 这个命令里的管道具体是怎么工作的?

Linux shell的管道(|)是进程间通信的经典方式,在这个场景里的工作流程是这样的:

  • 第一步:shell会在内核中创建一个管道缓冲区,这是一块专门用来在两个进程间传递数据的内存区域。
  • 第二步:启动左边的last命令,把它的标准输出(原本会打印到终端的内容)重定向到管道的写入端,last的输出会被直接写入这个缓冲区。
  • 第三步:启动右边的reboot命令,把它的标准输入(原本从键盘读取内容的通道)重定向到管道的读取端,理论上reboot可以从缓冲区读取last的输出。
  • 第四步:两个进程并行运行,但在这个例子里,reboot完全不会去读取管道里的数据,它启动后立刻执行重启操作,甚至可能last的输出还没写完,机器就已经重启了。

简单来说,管道只是帮你把两个命令的输入输出链路连起来,但如果右边的命令根本不关心输入,那这个连接就没有实际作用——就像你接了一根水管,但另一边根本没开龙头用它。

内容的提问来源于stack exchange,提问作者Steve_0404

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:51:10