10

While I'm running some program in Terminal (or iTerm2), when the program forks the process, the OS X desktop switches focus from the current application to the forked process. When this happens, the forked process name shows in OS X menu bar.

This is especially annoying while using full screen mode as it causes the workspace to change when the forked process receives focus.

How can I stop this focus switch from happening? These terminal programs are interrupting the work I'm doing in other applications while they run.

  • Which programs are you calling from Terminal? – nohillside Aug 26 '13 at 16:27
  • Maven. The Maven Surefire plugin for running Java Unit tests uses this ForkedBooter class which always takes focus away from the terminal – jdgilday Aug 27 '13 at 17:43
  • It's not just Maven but this is one of my concrete examples – jdgilday Aug 27 '13 at 17:44
  • Could it be that it only happens with Java applications? – nohillside Aug 27 '13 at 17:57
  • Perhaps. If I find a counter-example I'll post – jdgilday Aug 27 '13 at 18:09
5

In my case it was the Maven Failsafe Plugin that caused the annoying window focus stealing of ForkedBooter, and setting the JAVA_TOOL_OPTIONS variable in .bashrc didn't help.

This fix applies to both Failsafe and Surefire (although in my case, Surefire wasn't stealing focus).

In your pom.xml, add a <argLine>-Djava.awt.headless=true</argLine> line inside the <configuration> for the failsafe (and/or) surefire plugin.

It will look like this:

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

As @patrix has suggested, it seems I'm only having this problem with Java processes.

This answer over at StackOverflow seems to solve the problem

0

Can you run your terminal program in the background? I believe this will keep it from coming in focus on the desktop as well. Just add '&' to the end of the terminal command to run a process in the background.

So if your terminal command were:

sh someprocess.sh

change it to:

sh someprocess.sh &

To bring a background process to the foreground in terminal use the command:

fg

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .