ターミナルがプロセスをフォークすると、現在のアプリはフォーカスを失います


10

ターミナル(またはiTerm2)でプログラムを実行しているときに、プログラムがプロセスをフォークすると、OS Xデスクトップが現在のアプリケーションからフォークされたプロセスにフォーカスを切り替えます。この場合、フォークされたプロセス名がOS Xメニューバーに表示されます。

これは、全画面モードを使用しているときに特に煩わしく、フォークされたプロセスがフォーカスを受け取ったときにワークスペースが変更されるためです。

このフォーカスの切り替えが起こらないようにするにはどうすればよいですか?これらの端末プログラムは、実行中に他のアプリケーションで実行している作業を中断しています。


ターミナルからどのプログラムを呼び出していますか?
ノーヒルサイド

Maven。Javaユニットテストを実行するためのMaven Surefireプラグインは、このForkedBooterクラスを使用します。このクラスは常にターミナルからフォーカスを外します
jdgilday

それだけでMavenのではないのですが、これは私の具体的な例の1つである
jdgilday

それはJavaアプリケーションでのみ発生するのでしょうか?
nohillside

たぶん。反例を見つけたら投稿します
jdgilday 2013

回答:


5

私の場合、Maven Failsafe Pluginが原因で、ForkedBooterのウィンドウフォーカスの横取りが煩わしく、JAVA_TOOL_OPTIONS変数を設定しても効果.bashrcがありませんでした。

この修正はFailsafeとSurefireの両方に適用されます(私の場合、Surefireはフォーカスを盗んでいませんでした)。

あなたにはpom.xml、追加<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>

4

@patrixが示唆しているように、Javaプロセスでのみこの問題が発生しているようです。

StackOverflowでこの答えは問題を解決するようです


0

端末プログラムをバックグラウンドで実行できますか?これにより、デスクトップにも焦点が当てられなくなると思います。端末コマンドの最後に「&」を追加するだけで、バックグラウンドでプロセスを実行できます。

したがって、端末コマンドが次の場合:

sh someprocess.sh

それを次のように変更します。

sh someprocess.sh&

ターミナルでバックグラウンドプロセスをフォアグラウンドにするには、次のコマンドを使用します。

fg

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.