从我的 Java 程序中,我启动了一个 x 终端。Java 等待 x-terminal 命令启动。(它是面向开发人员的 Datastore 模拟器。)
Process proc = Runtime.getRuntime().exec("/usr/bin/x-terminal-emulator -e gcloud beta emulators datastore start");
proc.waitFor();
在某些 Ubuntu 开发人员机器中,process.waitFor()
一旦启动命令就会返回。(该命令继续在该终端中运行。)这是预期的行为。
在其他 Ubuntu 开发人员机器中,这些process.waitFor()
块永久且永不返回。(但是终端命令已经启动,如果我们终止 Java 主进程,该终端命令会继续执行,应该如此。)
什么会导致这种行为差异?
/usr/bin/x-terminal-emulator
是一个符号链接,可以指向终端的许多不同实现,例如gnome-terminal
或konsole
其他。每个终端可能有它自己的逻辑,但是对于某些程序来说,第一次打开“主”进程然后在随后的打开中简单地告诉已经运行的进程生成另一个终端或打开另一个选项卡是很常见的。