为什么`cmd / k`和`cmd / c`记得已经完成的cmdsubprocess的历史?

这里是我执行的命令:

>cmd /k >echo 1 1 >echo 2 2 >echo 3 3 >exit /b >cmd /c "doskey /history" echo 1 echo 2 echo 3 exit /b > 

(在Windows 7x64testing)根据进程资源pipe理器cmd /k启动一个subprocess(而不是一个线程)。 所以在退出这个过程之后,我希望能够从记忆中清除他的东西。 这个事情发生在3/4 / ..产生的cmds, for /f ,与称为batch file

简洁版本:

控制台窗口处理命令历史记录

详细:

命令提示符窗口的过程如下:

conhost.exe
— doskey.exe
—— cmd.exe
———任何子进程(在你的情况下cmd /k

至于微软technet:

…如果从相同的“命令提示符”窗口退出并重新启动程序, 则可以使用之前程序会话中的命令历史记录。

在启动程序之前,您必须运行Doskey.exe。 即使程序有shell命令,也不能在程序的命令提示符下使用doskey命令行选项。

Doskeyconhost.exe下执行,显示命令提示符窗口。 这使得它可以监视所有子进程和线程的击键。

当您从另一个进程中调用cmd时, 根CMD进程将处理doskey历史记录

更新:

正如MC ND所评论的,在Windows XP / 2003 / Vista / 2008中,命令历史由csrss.exe处理。 从Windows 7向上, conhost.exe处理命令历史 – 更多在这里