我有3个命令可以在Windows终端中运行,但所有这些命令应该大致同时并行启动。我创建了.bat文件,将我的3个命令放在那里并运行了该bat文件。但是命令是以串行方式执行的(第二个命令仅在第一个命令完成后执行)。有没有一种特殊的方法在Windows中执行此操作?
如果我必须运行相同的命令/ exe并行,但使用不同的参数怎么办?我的意思是,假设我有两个命令,iperf.exe -s -u -i 1 10.10.100.1和iperf.exe -s -u -i 1 10.10.100.2;如果我在.bat文件中输入以下行并运行它们,它们会并行执行吗?
start iperf.exe -s -u -i 1 10.10.100.1
start iperf.exe -s -u -i 1 10.10.100.2
并且,即使它们并行运行,在执行并行进程时会有任何中断(即使是最轻微的),例如,如果一个线程依赖于另一个线程,还是它们将像每个命令一样严格并行执行是一个独立的进程?因为我需要程序同时运行,它们应该像独立和独立的进程一样,没有任何依赖或中断。 START会为我提供这样的功能吗?
答案 0 :(得分:4)
批处理时,使用 start 命令,然后使用要启动的命令。所有arg:
start iperf.exe -s -u -i 1 10.10.100.1
start iperf.exe -s -u -i 1 10.10.100.2
在PowerShell中,使用启动流程(您也可以将其称为“开始”,这是启动流程的内置别名:
Start-Process iperf.exe -ArgumentList '-s -u -i 1 10.10.100.1'
Start-Process iperf.exe -ArgumentList '-s -u -i 1 10.10.100.2'
[注意:我的回答似乎是重复该问题的信息,因为编辑的问题包含了我的答案中的信息。最初的问题没有提及 start 命令,它只是询问如何使用批处理或PowerShell并行启动进程。]
要回答修改后的问题:cmd的开始和PowerShell的 Start-Process 都会进行子进程,而不是原始进程中的线程。在Windows中,子进程完全独立于父进程。我已经多次使用这两个来启动单独运行的应用程序,并且可以向您保证,与您以任何其他方式启动它们相比,它们的操作不再相互依赖。
答案 1 :(得分:1)
PowerShell中的start相当于Start-Process,正如已经指出的那样,但是将参数传递给exe有点棘手,例如:
Start-Process iperf -arg -s,-u,-i,1,10.10.100.1
Start-Process iperf -arg -s,-u,-i,1,10.10.100.2
我假设exe运行直到您按Ctrl + C或按Enter键?否则窗口打开,运行然后退出。
答案 2 :(得分:0)
我认为你不能,不是批量,也不是OS。
为了最大限度地减少操作系统进程加载开销,您可以尝试通过Windows API加载所有暂停的进程(CreateProcess
,CREATE_SUSPENDED
),然后在快速循环中启动所有线程(ResumeThread
)。
但我无法通过命令行看到任何方法,你必须通过编程。