0

我有 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 会为我提供这样的功能吗?

4

3 回答 3

4

批量使用start命令,后跟要启动的命令。所有参数:

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 (您也可以将其称为“start”,这是Start-Process的内置别名:

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'

[注意:我的答案似乎重复了问题中的信息,因为该问题已被编辑以包含我的答案中的信息。最初的问题没有提到启动命令,它只是询问如何使用批处理或 PowerShell 并行启动进程。]

回答修改后的问题: cmd 的start和 PowerShell 的Start-Process都生成一个子进程,而不是原始进程中的线程。在 Windows 中,子进程完全独立于彼此和父进程。我已经多次使用这两种方法来启动单独运行的应用程序,并且可以向您保证,它们的操作不会比您以任何其他方式启动它们时更加相互依赖。

于 2013-07-25T23:34:33.290 回答
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 键?否则,窗口打开、运行然后退出。

于 2013-07-26T02:44:27.487 回答
0

我认为您不能,无论是批量还是在操作系统中。

为了最大限度地减少操作系统进程的加载开销,您可以尝试通过 Windows API 加载所有暂停的进程(CreateProcess, CREATE_SUSPENDED),然后在快速循环中启动所有线程(ResumeThread)。

但是我看不到任何用命令行来做到这一点的方法,你必须通过编程。

于 2013-07-26T09:53:41.007 回答