Während ich ein Programm in Terminal (oder iTerm2) ausführe und das Programm den Prozess verzweigt, wechselt der OS X-Desktop den Fokus von der aktuellen Anwendung auf den verzweigten Prozess. In diesem Fall wird der gespaltene Prozessname in der OS X-Menüleiste angezeigt.
Dies ist besonders ärgerlich, wenn Sie den Vollbildmodus verwenden, da es dazu führt, dass sich der Arbeitsbereich ändert, wenn der gegabelte Prozess den Fokus erhält.
Wie kann ich diesen Fokuswechsel verhindern? Diese Terminalprogramme unterbrechen meine Arbeit in anderen Anwendungen, während sie ausgeführt werden.
In meinem Fall war es das Maven Failsafe Plugin, das den lästigen Fensterfokus von ForkedBooter verursacht hat, und das Setzen der JAVA_TOOL_OPTIONS
Variable .bashrc
hat nicht geholfen.
Dieser Fix gilt sowohl für Failsafe als auch für Surefire (obwohl Surefire in meinem Fall den Fokus nicht gestohlen hat).
Fügen Sie in Ihrer pom.xml
, eine <argLine>-Djava.awt.headless=true</argLine>
Zeile <configuration>
für das ausfallsichere (und/oder) todsichere Plugin hinzu.
Es wird so aussehen:
<!-- this is inside your <project><build><plugins> block -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${maven.surefire.plugin.version}</version>
<configuration>
<includes>
<include>**/unit/**/*Test*.java</include>
</includes>
<!-- prevent the annoying ForkedBooter process from stealing window
focus on Mac OS -->
<argLine>-Djava.awt.headless=true</argLine>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>${maven.failsafe.plugin.version}</version>
<configuration>
<!-- prevent the annoying ForkedBooter process from stealing window
focus on Mac OS -->
<argLine>-Djava.awt.headless=true</argLine>
<includes>
<include>**/integration/**/*Test*</include>
</includes>
</configuration>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
Wie @patrix vorgeschlagen hat, habe ich dieses Problem anscheinend nur mit Java-Prozessen.
Diese Antwort bei StackOverflow scheint das Problem zu lösen
Können Sie Ihr Terminalprogramm im Hintergrund ausführen? Ich glaube, dies wird verhindern, dass es auch auf dem Desktop in den Fokus rückt. Fügen Sie einfach '&' am Ende des Terminalbefehls hinzu, um einen Prozess im Hintergrund auszuführen.
Also, wenn Ihr Terminalbefehl wäre:
sh irgendein Prozess.sh
ändere es zu:
sh someprocess.sh &
Um einen Hintergrundprozess im Terminal in den Vordergrund zu bringen, verwenden Sie den Befehl:
fg
kein Hang
jdgilday
jdgilday
kein Hang
jdgilday
Jacob Foshee
mono
in einem ähnlichen Szenario passiert.jdgilday