java processbuilder 中字符串参数的最大长度

Maximum length of string argument in java processbuilder

我知道当我们从命令行/终端执行应用程序时存在字符串限制,这取决于 OS。
但是如果我们使用 Java ProcessBuilder 来执行应用程序,是否有任何最大字符串长度可以作为参数传递给 java ProcessBuilder ?

   ProcessBuilder pb = new ProcessBuilder("myCommand", "myArg1", "myArg2");

谢谢

Java不限制长度。您可以传递 n 个参数,但这取决于 OS.

来自 Java 文档的描述 ProcessBuilder

Constructs a process builder with the specified operating system program and arguments. This is a convenience constructor that sets the process builder's command to a string list containing the same strings as the command array, in the same order. It is not checked whether command corresponds to a valid operating system command.

通常我们不会在命令行中传递超过 4 个参数,而是将所有内容保存在文件中并提供文件名作为单个参数并使用配置文件。

如果您查看 ProcessBuilder 源代码,流程创建将委托给 OS 特定的 java.lang.ProcessImpl

例如 ProcessImpl 的 Windows 版本在 Win API 中调用 CreateProcess,传递命令行字符串。参数 lpCommandLine 的文档指出:"The maximum length of this string is 32,768 characters".

所以是的,会有 OS 特定的长度限制,基于 OS 创建流程的功能。