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
%