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.


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>


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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.