2017-02-22 5 views
1

파일 처리가 끝난 후 응용 프로그램을 종료하는 스크립트를 원합니다. 아래의 코드는 내가 다른 창조물을 연구하여 자신을 창조하려고 노력했지만 실제로 작동하도록하는 데 운이 없었습니다. 이 특정 소프트웨어 용량 그러므로 내가 찾을 수있는 유일한 트리거를 자동화 된 워크 플로우를 지원하지 것은 때 사용하거나 작은 1.3 % 유휴 상태가 100 % 개까지 사용할 수사과 스크립트를 사용하여 지정된 CPU에서 응용 프로그램을 종료합니다. %

getProcessPercentCPU("Mixed In Key 8") 
set someProcess to getProcessPercentCPU("Mixed In Key 8") 
on getProcessPercentCPU(someProcess) 

repeat 

    do shell script "/bin/ps -xco %cpu,command | /usr/bin/awk '/" & someProcess & "$/ {print $1}'" 

    if someProcess is less than "2.0" then 
     application "Mixed In Key 8" quit 
    end if 
end repeat 
end getProcessPercentCPU 

사람의 경우는 CPU %로 이동했다 이 일을하는 데 도움이 될 수 있거나 매우 높이 평가 될만한 추천을받을 수 있습니다. 또한 나는 애플 스크립트를 처음 사용합니다.

답변

0

기본적으로 올바르지 만 조각이 올바르게 작동하는지 확인하기 전에 먼저 뛰어 오르는 것처럼 보입니다. 또한 처리기와 변수의 이름을 지정하려고하면 도움이 될 수 있습니다. 예를 들어,이 경우 처리기가 앱을 모니터링하고 낮은 CPU 사용량에 도달하면 해당 앱을 종료하는 것처럼 보입니다.

예에서 프로세스 이름을 TaskPaper으로 변경했는데 사용할 수 있으므로 유의하십시오. 쉘 스크립트는 우리가 원하는 수를 반환하는 것을, 그리고 문자열로 반환 있다고 :이 시점에서

quitOnLowCPU("TaskPaper") 

on quitOnLowCPU(processToMonitor) 
    set processCPU to do shell script "/bin/ps -xco %cpu,command | /usr/bin/awk '/" & processToMonitor & "$/ {print $1}'" 
    display dialog processCPU 
end quitOnLowCPU 

, 우리는 두 가지를 알고있다.

숫자를 안정적으로 비교하려면 숫자 값으로 변환해야합니다.

quitOnLowCPU("TaskPaper") 

on quitOnLowCPU(processToMonitor) 
    set processCPU to do shell script "/bin/ps -xco %cpu,command | /usr/bin/awk '/" & processToMonitor & "$/ {print $1}'" 

    --convert the shell script response string to a number 
    set processCPU to processCPU as number 
    --compare to the threshold of quitting 
    if processCPU is less than 2.0 then 
     tell application processToMonitor to quit 
    end if 
end quitOnLowCPU 

이 작동하지만, 그것은 또한 실행되지 processToMonitorprocessToMonitor 경우 종료하려고합니다.

quitOnLowCPU("TaskPaper") 

on quitOnLowCPU(processToMonitor) 
    set processCPU to do shell script "/bin/ps -xco %cpu,command | /usr/bin/awk '/" & processToMonitor & "$/ {print $1}'" 

    if processCPU is "" then 
     --the process is gone. We're done 
     return 
    end if 

    --convert the shell script response string to a number 
    set processCPU to processCPU as number 
    --compare to the threshold of quitting 
    if processCPU is less than 2.0 then 
     tell application processToMonitor to quit 
    end if 
end quitOnLowCPU 

이제 우리는 핸들러 주위에 repeat를 추가 할 준비가 : 끝없이 반복 스크립트는 종종 자신의 CPU 돼지가 될 수 있기 때문에

quitOnLowCPU("TaskPaper") 

on quitOnLowCPU(processToMonitor) 
    repeat 
     set processCPU to do shell script "/bin/ps -xco %cpu,command | /usr/bin/awk '/" & processToMonitor & "$/ {print $1}'" 
     if processCPU is "" then 
      --the process is gone. We're done 
      return 
     end if 

     --convert the shell script response string to a number 
     set processCPU to processCPU as number 
     --compare to the threshold of quitting 
     if processCPU is less than 2.0 then 
      tell application processToMonitor to quit 
     end if 
     delay 1 
    end repeat 
end quitOnLowCPU 

내가 각 반복에 delay을 추가했다.