애플리케이션이 종료되는 시점을 모니터링하는 방법은 무엇입니까?

애플리케이션이 종료되는 시점을 모니터링하는 방법은 무엇입니까?

Atom 텍스트 편집기가 닫힐 때 스크립트가 실행되도록 모니터링하고 싶습니다.

명령줄 구문을 사용하여 편집기를 열고 싶습니다 atom. 편집기를 닫을 때 bash 스크립트를 실행하고 싶습니다.

어떻게 해야 하나요?

답변1

명령줄 구문을 사용하여 편집기를 열고 싶습니다 atom. 편집기를 닫을 때 bash 스크립트를 실행하고 싶습니다.

atom실제로 실행 되고 whatever실행 되는 쉘 함수 또는 스크립트를 작성하십시오 .


예시 함수

atom () (
  command atom "$@"
  /path/to/whatever
)

오른쪽 시작 파일( ~/.bashrcBash의 경우)에 함수를 정의합니다. 새 셸을 엽니다. 이제부터 atom셸에서 호출하면 함수가 실행됩니다. 이 방법은 셸 외부에는 영향을 미치지 않습니다.


샘플 스크립트

(참고: 스크립트와 함께 함수를 사용하는 것은 의미가 없습니다.)

#!/bin/sh
/path/to/real/atom "$@"
/path/to/whatever

스크립트 이름을 으로 지정 하고 실행 가능하게 만든 다음 다른 디렉터리보다 오래된 atom디렉터리에 배치합니다 (이러한 디렉터리를 만들고 수정해야 할 수도 있음 ). 이제 변수를 사용하여 그것을 찾는 모든 것이 스크립트를 찾을 것입니다. 이 방법은 셸 외부에서 작동합니다.PATHatomPATHPATHatom

그러나 Atom을 일반적인 경로(즉, 경로가 아닌 경로)를 통해 실행하려고 하면 실제 스크립트처럼 실행 PATH됩니다 . atom실제 값을 다른 곳으로 옮기고 atom모든 사람이 실제 값을 예상하는 곳에 스크립트를 배치할 수 있지만 atom(그리고 /path/to/real/atom스크립트가 자체적으로 호출되지 않도록 스크립트에서 조정) Atom을 업데이트하는 것은 매우 어렵기 때문에 권장하지 않습니다. 스크립트를 덮어쓸 수 있습니다.


가능한 개선

  • 위 함수나 위 스크립트는 whatever마지막 명령이기 때문에 종료 상태로 종료됩니다. 어쩌면 실제 종료 상태로 종료되기를 원할 수도 있습니다 atom. 이는 특히 스크립트에 해당됩니다. 이 이름의 스크립트는 atom실제 프로그램을 실행하려는 모든 프로그램에 의해 호출될 수 있으며 호출 프로세스 중 일부가 종료 상태를 사용하여 특정 작업을 수행한다는 atom점을 배제할 수 없습니다 .atom

    종료 상태를 유지하는 함수는 다음과 같습니다.

    atom () (
       command atom "$@"
       status="$?"
       /path/to/whatever
       exit "$status"
    )
    

    (이 함수는 의도적으로 서브쉘에서 실행되므로 해당 status변수는 메인 쉘에 영향을 미치지 않습니다.)

    동일한 스크립트:

    #!/bin/sh
    /path/to/real/atom "$@"
    status="$?"
    /path/to/whatever
    exit "$status"
    
  • 함수나 스크립트가 실제로 종료된 후 가능한 한 빨리 종료되기를 원할 수도 atom있고 비동기적으로 시작하기를 원할 수도 있습니다 whatever. 그 /path/to/whatever &대신 함수/스크립트를 실행해 보세요 /path/to/whatever.


일반적인 주의사항

  • 함수나 스크립트는 whatever다음 이후에 실행됩니다.노력하다Running real atom. atomReal이 창을 표시하거나 시작하는지 여부는 중요하지 않습니다. 종료 상태를 테스트하면 몇 가지 예외(예: /path/to/real/atom트리거된 경우 No such file or directory종료 상태 127)를 감지하고 조건부로 이를 억제할 수 있습니다 whatever. "응용 프로그램이 닫힐 때"가 "창이 닫힐 때"를 의미한다면 상황은 그렇게 간단하지 않습니다.

  • 일반적으로 브라우저나 텍스트 편집기와 같은 프로그램을 두 번째 호출하면 다른 인스턴스가 이미 실행 중임을 감지하고 자체 작업을 다른 프로세스에 위임할 수 있습니다. 실제로 새 탭이나 이전 창에 뭔가가 생성되는 것과 같습니다. 작업이 넘겨진 후 즉시 새 프로세스가 종료됩니다. 작업은 이전 인스턴스의 책임이 됩니다. Atom이 이 작업을 수행하면 whatever작업 자체가 완료/종료되지 않았더라도 새 프로세스가 작업을 위임하고 종료한 직후에 작업(새 프로세스와 연결된)이 실행되는 것을 볼 수 있습니다 . 저는 Atom을 모르고, 이렇게 작동할 수 있는지도 모르겠습니다.

  • 일반적으로 프로세스는 자체 실행 파일이나 이름을 호출하여 다른 인스턴스를 생성할 수 있습니다(아마도 창 없이 자동으로). Atom(즉, 실제)이 atom위치에 사용되는 방식으로 이 작업을 수행하고 스크립트를 찾으면 예상보다 더 많은 인스턴스를 관찰하게 됩니다. 일부 방법은 사용되지 않습니다. 다시 말하지만 저는 Atom을 모릅니다. 이 작업을 수행하는지 또는 어떤 방식으로 수행하는지 모릅니다.PATHatomwhateverPATH

관련 정보