gpt4 book ai didi

windows - 为什么 `cmd/k` 和 `cmd/c` 会记住已经完成的 cmd 子进程的历史记录?

转载 作者:可可西里 更新时间:2023-11-01 13:54:29 35 4
gpt4 key购买 nike

这是我执行的命令:

>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 7x64 上测试)根据进程资源管理器,cmd/k 启动一个子进程(不是线程)。所以在进程退出后,我希望它会从内存中清除他的东西。这件事发生在 3/4/.. spawned cmds , for/f ,带有调用的批处理文件。

最佳答案

简短版:

控制台窗口处理命令历史

详细:

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

conhost.exe
--- doskey.exe
------ cmd.exe
--------- any sub-processes (In your case cmd /k)


Microsoft technet:

... If you exit and then restart a program from the same Command Prompt window, the command history from the previous program session is available.

You must run Doskey.exe before you start a program. You cannot use doskey command-line options from a program's command prompt, even if the program has a shell command.

Doskeyconhost.exe 下执行,该进程显示命令提示符窗口。这使它能够监控所有子进程和线程的击键。

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


更新:

正如 MC ND 评论的那样, 在 Windows XP/2003/Vista/2008 中,命令历史由 csrss.exe 处理。从 Windows 7 开始,conhost.exe 处理命令历史记录 - 更多 here

关于windows - 为什么 `cmd/k` 和 `cmd/c` 会记住已经完成的 cmd 子进程的历史记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43097489/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com