我可以从同一目录中的多个命令行提示符打开 运行 吗?

Can I open and run from multiple command line prompts in the same directory?

我想从同一目录打开两个命令行提示符(我正在使用 CMDer)并同时 运行 不同的命令。 这两个命令会互相打断吗? 一个用于编译我正在构建的 Web 应用程序(编译大约需要 7 分钟),另一个用于查看命令的历史记录我 运行(这个应该很快完成)。

谢谢!

假设 CMDer 除了向操作系统发出与标准 cmd.exe 控制台相同的命令之外什么都不做,那么答案很明确 "Yes, they do interfere, but it depends" :D

细分:

第一部分"opening multiple consoles"当然可以。您可以打开 N 控制台 windows 并在每个控制台中切换到同一目录而不会出现任何问题(除了 RAM 限制)。

第二部分"run commands which do or do not interfere"是棘手的部分。如果您的想法是控制台 window 向您呈现类似于隔离环境的东西,您可以在其中随心所欲地做事,如果您关闭 window 一切都会恢复正常,就好像您从未接触过任何东西一样(想想关闭 VM 时 lost/reverted 的虚拟机快照)——那么答案是:事实并非如此。将有可观察到的跨控制台效果。

考虑在一个控制台中删除一个文件window,然后在第二个控制台中打开这个文件window:如果文件在第二个控制台中没有消失,那将不是很直观控制台 window 以及。
但是,有时会有延迟,直到文件系统的更改对另一个控制台可见 window。可能是,您在一个控制台中删除该文件并在该文件位于另一个控制台中的位置创建一个 dir,并且仍然在列表中看到该文件。但是,如果您尝试访问它,操作系统肯定会退出并显示 "File not found" 类型的错误消息。

通常,您应该将控制台 window 视为系统上的 "View"。如果你在一个 window 中做某事,效果将出现在另一个中,因为你更改了仅存在一次的底层系统(该系统是 "Model" - 如 "Model-View-Controller Design Pattern" 你可能听说过)。
一个例外可能是对环境变量的更改。当控制台 window 启动时,这些是从当前状态复制的。如果您更改此类变量的值,另一个控制台 windows 将不受影响。

因此,在您的场景中,如果您让 build/compile 操作 运行 并且在此过程中您的文件系统上的一些文件被创建、读取(锁定)、更改或删除,那么这将如果另一个控制台 window 尝试访问相同的文件,则可能会出现冲突情况。这将是一个所谓的 "race condition",即一个非确定性过程,文件的哪个状态对于第二个控制台 window 是实际的(或两者,如果第二个控制台也更改了文件第一个想与之合作)。 如果没有文件级别的干扰(允许读取相同的文件,不允许写入相同的文件),那么让两个任务同时运行应该没有问题。

但是,从非常详细的角度来看,这两个进程都会干扰,因为它们需要相同的有限但大量可用的 CPU 和系统的 RAM 资源。考虑到 X 个独立内核、16GB RAM、TB 级硬盘存储或快速 SSD 等功能,这应该不会对当今的 PC 计算能力造成任何问题。
除非有一个非常苛刻的、高度可并行化的、高优先级的任务需要考虑,例如,它占用了 98% CPU 的时间。然后可能会对其他进程产生相当大的减速影响。
通常,操作系统的调度程序在为每个用户进程提供足够的 CPU 时间以尽快完成方面做得很好,同时仍然呈现响应式鼠标光标,在后台播放一些音乐,允许 Chrome 运行 超过 2 个选项卡 ;) 并将最新的遥测数据同时上传到互联网上的某些服务器。

有一些技术可以使文件作为给定时间戳的某些快照可用。关键词是 Windows 下的 "Shadow Copy"。无需详细说明,此技术允许在某些应用程序中编辑文件时对文件进行碎片整理,或者备份可以复制(大)文件,而删除操作是 运行 同一文件。操作系统确保在进程请求访问文件时考虑访问时间。所以 OS 可以让备份先完成,直到它安排删除操作到 运行,因为这是在备份之后开始的(在这个例子中)或者可以做更复杂的事情来呈现同步文件系统状态,即使它此刻实际上正在改变。