Wenn der Prozess forks verarbeitet, verliert die aktuelle App den Fokus

10

Wenn ein Programm in Terminal (oder iTerm2) ausgeführt wird und das Programm den Prozess forciert, wechselt der OS X-Desktop von der aktuellen Anwendung zu dem verzweigten Prozess. In diesem Fall wird der verzweigte Prozessname in der OS X-Menüleiste angezeigt.

Dies ist besonders im Vollbildmodus ärgerlich, da sich der Arbeitsbereich ändert, wenn der verzweigte Prozess den Fokus erhält.

Wie kann ich verhindern, dass dieser Fokuswechsel stattfindet? Diese Terminalprogramme unterbrechen meine Arbeit in anderen Anwendungen, während sie ausgeführt werden.

jdgilday
quelle
Welche Programme rufen Sie von Terminal aus an?
nohillside
Maven Das Maven Surefire-Plugin zum Ausführen von Java Unit-Tests verwendet dies ForkedBooter Klasse, die immer den Fokus vom Terminal nimmt
jdgilday
Es ist nicht nur Maven, aber dies ist eines meiner konkreten Beispiele
jdgilday
Könnte es sein, dass dies nur mit Java-Anwendungen geschieht?
nohillside
Vielleicht. Wenn ich ein Gegenbeispiel finde, poste ich
jdgilday

Antworten:

5

In meinem Fall war es das Maven Failsafe Plugin, das den ärgerlichen Fensterfokus von ForkedBooter verursachte und die Einstellung der JAVA_TOOL_OPTIONS Variable in .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).

In deiner pom.xml, füge hinzu ein <argLine>-Djava.awt.headless=true</argLine> Linie innerhalb der <configuration> für das fehlersichere (und / oder) todsichere Plugin.

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>
michele b
quelle
4

Wie @patrix vorgeschlagen hat, scheint dieses Problem nur bei Java-Prozessen zu bestehen.

Diese Antworten Sie bei StackOverflow scheint das Problem zu lösen

jdgilday
quelle
0

Können Sie Ihr Terminalprogramm im Hintergrund ausführen? Ich glaube, dass dies auch auf dem Desktop nicht im Fokus stehen wird. Fügen Sie einfach "& amp;" bis zum Ende des Terminalbefehls, um einen Prozess im Hintergrund auszuführen.

Wenn Ihr Terminalbefehl also wäre:

sh someprocess.sh

Ändern Sie es in:

sh someprocess.sh & amp;

Um einen Hintergrundprozess im Terminal in den Vordergrund zu bringen, verwenden Sie den Befehl

fg

AllInOne
quelle