한 번에 하나의 쉘 스크립트 인스턴스만 실행하고 새 인스턴스가 이전 인스턴스를 종료하고 싶습니다.
저는 Linux를 사용하고 있으며 이것이 좋은 접근 방식이라고 생각합니다.
# Terminate other instances by name and name self.
kill -15 $(printf -- '-%s ' $(pgrep mychosenname))
echo mychosenname >| /proc/$$/comm
자식 프로세스도 종료하고 싶기 때문에 PID를 무효화하려면 printf를 참고하세요. 잘 작동하는 것 같습니다. 그러나 어떤 이유로 내 ~/.xprofile(X가 시작될 때)에서 생성된 프로세스에서는 작동하지 않습니다.
ps -a
보여주다:
...
924 tty1 00:00:00 mychosenname?
...
pgrep -a mychosenname
보여주다:
924 sh /home/sedwho/projects/mychosenname/run
수동으로 시도해 보면 다음 과 같은 결과를 kill -15 -924
얻습니다.
kill: kill -924 failed: no such process
그리고 이전과 동일한 출력을 제공합니다.ps
pgrep
kill -15 924
종료하되 하위 프로세스는 종료하지 마세요. :(
답변1
부정적인 프로세스 ID가 아닙니다.
Kill의 두 번째 매개변수로 전달된 음수는 프로세스 그룹 ID(pgid)를 나타냅니다.
귀하의 질문에 대답하려면 해당 번호의 프로세스 그룹 ID가 없기 때문에 프로세스 그룹 ID에 신호를 보낼 수 없습니다.
다음이 유용할 수 있습니다.
ps -ao pid,pgid,user,time,command
ps -q 924 pgid=