macOS에서 bash 스크립트를 어떻게 pgrep합니까(또는 백그라운드에서 실행 중인 스크립트를 프로그래밍 방식으로 종료합니까)?

macOS에서 bash 스크립트를 어떻게 pgrep합니까(또는 백그라운드에서 실행 중인 스크립트를 프로그래밍 방식으로 종료합니까)?

macOS에서 백그라운드 프로세스로 실행 중인 bash 스크립트를 프로그래밍 방식으로 종료하려고 합니다. 지금 결정한 접근 방식은 pgrep스크립트 이름을 지정한 다음 PID 값을 kill함수에 전달하는 것입니다.

참고: 이 작업을 수행하는 방법에 대한 더 나은 제안이 있는 경우 언제든지 알려주시기 바랍니다.

내가 겪고 있는 문제는 macOS에서 프로세스 이름이 단지 스크립트 이름 이 아니라 /bin/bash /Users/...../[scriptname]. 나에게 여러 결과가 있습니다.pgrep [scriptname]pgrep bash

누구든지 i) pgrep이 스크립트를 올바르게 사용할 수 있는 방법 kill또는 ii) 이 작업을 수행하는 더 명확하고 깔끔한 방법이 있습니까?

/bin/bash참고: Lubuntu에서 동일한 스크립트를 실행하면 이름의 일부로 전체 디렉터리가 없지만 [scriptname]. 라고만 지정되므로 pgrep [scriptname]예상대로 작동합니다.

답변1

예 - macOS는 이 점에 있어서 매우 혼란스럽습니다. 하지만 저는 pgrep이것이 pkill이 문제를 해결하는 좋은 방법이라고 생각합니다.

% pgrep -U 502 -f sleepforever.sh
43894

설명이 필요할 수 있습니다.

  • -U 502내 것이 되어라실제 사용자 ID에서 얻은id

  • sleepforever.sh이것을 테스트하기 위해 만든 스크립트는 다음과 같습니다.

    #!/bin/bash
    while :
    do
        sleep 10
    done
    

그러나 pgrep실제로 수행할 수 있는 pid작업은 find 작업을 완료하는 것뿐입니다. pkill이는 다음과 많은 매개변수를 공유합니다 pgrep.

% pkill -U 502 -f sleepforever.sh
%

관련 정보