终端分叉处理时,当前应用失去焦点


10

当我在Terminal(或iTerm2)中运行某些程序时,当该程序派生该进程时,OS X桌面切换会将焦点从当前应用程序转移到派生进程。发生这种情况时,分叉的进程名称将显示在OS X菜单栏中。

在使用全屏模式时,这尤其令人讨厌,因为当分叉的过程获得焦点时,它会导致工作空间发生变化。

如何阻止此焦点切换发生?这些终端程序在运行时中断了我在其他应用程序中所做的工作。


您要从Terminal调用哪些程序?
nohillside

Maven。用于运行Java单元测试的Maven Surefire插件使用此ForkedBooter类,该类始终将焦点从终端
移开

这不仅是Maven,而且这是我的具体例子之一
jdgilday

难道只有Java应用程序会发生这种情况?
nohillside

也许。如果找到反例,我将发布
jdgilday 2013年

Answers:


5

在我的情况下,是Maven故障安全插件导致了令人讨厌的ForkedBooter的窗口焦点窃取,并且将JAVA_TOOL_OPTIONS变量设置为.bashrc无济于事。

此修复程序同时适用于Failsafe和Surefire(尽管在我看来,Surefire并未引起人们的关注)。

在您的中pom.xml,在forfailsafe(和/或)surefire插件的<argLine>-Djava.awt.headless=true</argLine>内部添加一行<configuration>

它看起来像这样:

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

您可以在后台运行终端程序吗?我相信这也将使它也不再专注于台式机。只需在终端命令的末尾添加“&”,即可在后台运行进程。

因此,如果您的终端命令是:

sh someprocess.sh

更改为:

sh someprocess.sh&

要将后台进程置于终端中的前台,请使用以下命令:

fg

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.