当鼠标在提示的滚动条上按下时,比如在执行一个长命令期间(dir /a /s c:\
例如),输出似乎暂停了。
不仅如此,cmd.exe
只要鼠标保持按下状态,CPU 占用率就会降至零。松开鼠标后,CPU 占用率就会恢复正常。
这是否意味着终端命令暂停鼠标按下时会这样吗?还是输出只是暂停了?没有任何 CPU 使用率似乎可疑地指向进程暂停。
答案1
从技术上来说,仅显示输出在您按住滚动条时暂停:控制台子系统暂时停止从输出缓冲区读取并显示它。但是,该进程仍在运行,并且所述输出缓冲区很快就会填满,这使得所有进一步的 write() 在缓冲区已满时都“阻塞”。这就是使进程看起来暂停的原因。
(请注意,有两个不同的组件 - 控制台窗户和程式里面正在运行。“命令提示符”只是cmd.exe
命令解释器,但窗口连同滚动条都是由 CSRSS 显示的。
答案2
我会说是的,移动滚动条时进程会暂停。当我使用 robocopy 进行复制时,我向上滚动窗口以查看我在复制时发现错误的文件,robocopy 会等待它所在的位置,直到我完成滚动并释放鼠标按钮。当我控制滚动条时,robocopy 没有任何硬盘或网络活动。一旦我释放滚动条,它就会跳到底部,robocopy 会继续按原样运行。
答案3
我们可以肯定地说:
ver|time > time1.txt && dir /s && ver|time > time2.txt
运行此程序时,如果暂停输出或不暂停输出,你会发现处理时间更长。这不仅仅是输出暂停。