Khi Terminal forks xử lý, ứng dụng hiện tại mất tập trung


10

Trong khi tôi đang chạy một số chương trình trong Terminal (hoặc iTerm2), khi chương trình tiến hành quá trình, máy tính để bàn OS X chuyển trọng tâm từ ứng dụng hiện tại sang quá trình rẽ nhánh. Khi điều này xảy ra, tên tiến trình rẽ nhánh hiển thị trong thanh menu OS X.

Điều này đặc biệt khó chịu trong khi sử dụng chế độ toàn màn hình vì nó khiến không gian làm việc thay đổi khi quá trình rẽ nhánh nhận được tiêu điểm.

Làm thế nào tôi có thể ngăn chặn chuyển đổi tập trung này xảy ra? Các chương trình đầu cuối này đang làm gián đoạn công việc tôi đang làm trong các ứng dụng khác trong khi chúng chạy.


Những chương trình bạn đang gọi từ Terminal?
nohillside

Maven. Plugin Maven Surefire để chạy các bài kiểm tra Đơn vị Java sử dụng lớp ForkedBooter này luôn lấy điểm tập trung khỏi thiết bị đầu cuối
jdgilday

Đó không chỉ là Maven mà đây là một trong những ví dụ cụ thể của tôi
jdgilday

Có thể là nó chỉ xảy ra với các ứng dụng Java?
nohillside

Có lẽ. Nếu tôi tìm thấy một ví dụ ngược tôi sẽ đăng
jdgilday

Câu trả lời:


5

Trong trường hợp của tôi, đó là Plugin Maven Failsafe đã gây ra sự đánh cắp tiêu điểm cửa sổ khó chịu của ForkedBooter và đặt JAVA_TOOL_OPTIONSbiến trong .bashrckhông có ích.

Khắc phục sự cố này áp dụng cho cả Failsafe và Surefire (mặc dù trong trường hợp của tôi, Surefire không lấy cắp trọng tâm).

Trong của bạn pom.xml, thêm một <argLine>-Djava.awt.headless=true</argLine>dòng bên trong <configuration>plugin chắc chắn failafe (và / hoặc).

Nó sẽ trông giống thế này:

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

Bạn có thể chạy chương trình thiết bị đầu cuối của bạn trong nền? Tôi tin rằng điều này sẽ giữ cho nó không tập trung vào máy tính để bàn là tốt. Chỉ cần thêm '&' vào cuối lệnh terminal để chạy một tiến trình trong nền.

Vì vậy, nếu lệnh thiết bị đầu cuối của bạn là:

sh someprocess.sh

thay đổi nó thành:

sh someprocess.sh &

Để đưa một quá trình nền tới tiền cảnh trong thiết bị đầu cuối, hãy sử dụng lệnh:

fg

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.