我从 Java 程序启动 x-terminal。Java 等待 x-terminal 命令启动。(这是面向开发人员的数据存储区模拟器。)
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 进程,该终端命令将继续,正如它应该的那样。)
什么原因导致了这种行为的差异?
答案1
/usr/bin/x-terminal-emulator
是一个符号链接,可以指向终端的许多不同实现,例如gnome-terminal
或konsole
等等。每个终端可能都有自己的逻辑,但有些程序通常会在第一次打开“主”进程时打开,然后在后续打开时直接告诉已在运行的进程生成另一个终端或打开另一个选项卡。