Durante l'elaborazione delle forcelle del terminale, l'app corrente non è più attiva


10

Mentre eseguo un programma nel Terminale (o iTerm2), quando il programma esegue il fork, il desktop OS X passa dall'attuale applicazione al processo biforcato. Quando ciò accade, il nome del processo biforcato viene visualizzato nella barra dei menu di OS X.

Ciò è particolarmente fastidioso quando si utilizza la modalità a schermo intero in quanto fa sì che l'area di lavoro cambi quando il processo biforcato viene attivato.

Come posso impedire questo interruttore di messa a fuoco? Questi programmi terminali stanno interrompendo il lavoro che sto svolgendo in altre applicazioni mentre sono in esecuzione.


Quali programmi stai chiamando dal terminale?
Nohillside

Esperto di. Il plug-in Maven Surefire per l'esecuzione di test di unità Java utilizza questa classe ForkedBooter che si concentra sempre lontano dal terminale
jdgilday

Non è solo Maven, ma questo è uno dei miei esempi concreti
jdgilday,

Potrebbe essere che accada solo con le applicazioni Java?
Nohillside

Forse. Se trovo un contro-esempio,
posterò

Risposte:


5

Nel mio caso è stato il plug-in Maven Failsafe che ha causato il fastidioso focus sul furto della finestra di ForkedBooter e l'impostazione della JAVA_TOOL_OPTIONSvariabile .bashrcnon ha aiutato.

Questa correzione si applica sia a Failsafe che a Surefire (anche se nel mio caso, Surefire non stava rubando il focus).

Nel tuo pom.xml, aggiungi una <argLine>-Djava.awt.headless=true</argLine>riga all'interno del <configuration>plug-in sicuro (e / o) surefire.

Sarà simile a questo:

<!-- 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

Puoi eseguire il tuo programma terminale in background? Credo che questo impedirà che si focalizzi anche sul desktop. Aggiungi '&' alla fine del comando terminal per eseguire un processo in background.

Quindi se il tuo comando terminale fosse:

sh someprocess.sh

cambiarlo in:

sh someprocess.sh &

Per portare un processo in background in primo piano nel terminale, utilizzare il comando:

fg

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.