I have a «kernell panic (KP)» problem with a all-in-one printer driver that HP does not support anymore with OS 10.4.9. The KP occurs normally after the computer is left unatended for a few hours. It look like the systme checks periodically the printers and that the KP then occurs.
Since I use it to scan and fax only (I have a laser printer to print) my usual workaround is to unplug the device manualy. I just realized that if the application is not open that the kernell panic does not occur.
Is there a way to have a script to watch for a certain amount on inactivity time for that specific application, and after that delay to quit the app ?
Some of the subroutines I got from a post of hayne’s over on Macosxhints.
This checks the cpu of the app, in this example “Safari” the app name is CaSe sEnsitiVe
Set the cpuFloor to a average cpu usage of your app when it is running.
set the intervalCheckTime to the time between checks
The timerFloor is a repeater limit.
The timer is the counter for timerFloor
When run the App will check cpu usage of your app.
If the cpu usage is equal to or lower than the cpuFloor then the timer increases by 1.
if the cpu usage is higher than the cpuFloor then the timer is reset to 0.
once the timer is greater than the timerFloor
The app quits your app and then its self.
global info, pid, timer
property cpuFloor : 5.4
property intervalCheckTime : 5
property appname : "Safari"
property timerFloor : 10 as integer
on run
set timer to 0 as integer
end run
on idle
pidOfRunningApp(appname)
getProcessInfo(pid)
set percentCpu to info as integer
if percentCpu ≤ cpuFloor then
set timer to timer + 1
say timer --this is for testing
else
set timer to 0 as integer
end if
if timer < timerFloor then
return intervalCheckTime
else
my onquite()
end if
end idle
on onquite()
tell application appname to quit
tell me to quit
end onquite
on quit
continue quit
end quit
on pidOfRunningApp(appname)
tell application "System Events"
try
set pid to the unix id of process appname
on error
set pid to -1
end try
end tell
return pid
end pidOfRunningApp
on getProcessInfo(pid)
set perlCode to fixLineEndings("
# This script gets the '%CPU' of the process with the given 'pid'
# the process is using. The value is converted to megabytes.
open(PS, \"/bin/ps -p " & pid & " -o pid,rss,%cpu |\");
while (<PS>)
{
if (/^\\s*" & pid & "\\s+(\\d+)\\s+([\\d.]+)\\s*$/)
{
my $cpu = $2;
print \"$cpu\";
last;
}
}
close(PS);
")
set info to do shell script "perl -e " & quoted form of perlCode
return info
end getProcessInfo
on fixLineEndings(str)
set oldTIDs to AppleScript's text item delimiters
set theLines to paragraphs of str
set AppleScript's text item delimiters to ASCII character 10
set fixedStr to theLines as string
set AppleScript's text item delimiters to oldTIDs
return fixedStr
end fixLineEndings
This post caught my eye, as I am just starting the ‘Llama’ book on PERL. However, I am particularly lazy, and the CPU usage of an application can be done in one line as such:
set info to do shell script “ps -auwx | awk ‘/[M]T-News/{print $3}’”
The above example is for ‘MT-Newswatcher’ The brackets around the letter ‘M’ are important, otherwise you get two matches, the actual application and the ps command itself.
The OP just needs to change the text between the ‘//’ with enough of his application name to make it unique.
Cordially,
Andy H
Browser: Safari 412
Operating System: Mac OS X (10.4)
I would really like to use this script but I don’t know how to get it to work. I have no experience scripting and really don’t have the time to learn it. Also, instead of safari I’d like it to work on limewire. I just bought my mother an iMac and my younger brother leaves limewire running on his account which is password protected, and it makes ichat audio and video really choppy. So basically since telling him to shut limewire down when he’s done simply won’t get through his thick skull I’d like to employ an automated action like the one above to auto quit limewire after say 10 minutes of idle time. Am I in the right place?? Any help would be appreciated.
Hi Matt,
posting this back here rather than PM, so others can see this.
As I mentioned in the PM, I do not have or want LimeWire on my macs, so can not test this.
Open this script in Script Editor and run it.
It will create a app on your desktop called “Kill_LimeWire.app”
( For others here, There are many ways ( I have learn’t recently) to create this app, but this installer is my latest exploration. I wanted to see if I could use the Store script command to write out a .app but also have it as a stay open app. As far as i know its not normally possible hence all the ascii code which is only for use here since the actual code contains Null Characters. If any one knows different as to using STORE please let me know,thanks. P.S although I have asked Matt to run this, in my use I would have it saved as an app)
set script_text to MakeScript()
my RunMaker(script_text)
on RunMaker(script_text)
set file_path to (path to desktop as Unicode text) & "Killlime_Wire.app"
set file_spec to (file_path) as file specification
store script script_text in file_spec
set rzr to (ASCII character 0) & (ASCII character 0) & (ASCII character 1) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 1) & (ASCII character 42) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 42) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 90) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 26) & (ASCII character 64) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 2) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 2) & (ASCII character 0) & (ASCII character 1) & (ASCII character 0) & (ASCII character 0) & (ASCII character 1) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 1) & (ASCII character 42) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 42) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 90) & (ASCII character 4) & (ASCII character 167) & (ASCII character 90) & (ASCII character 96) & (ASCII character 1) & (ASCII character 199) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 28) & (ASCII character 0) & (ASCII character 90) & (ASCII character 0) & (ASCII character 2) & (ASCII character 115) & (ASCII character 99) & (ASCII character 115) & (ASCII character 122) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 26) & (ASCII character 115) & (ASCII character 112) & (ASCII character 115) & (ASCII character 104) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 38) & (ASCII character 112) & (ASCII character 114) & (ASCII character 101) & (ASCII character 102) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 50) & (ASCII character 0) & (ASCII character 0) & (ASCII character 255) & (ASCII character 255) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 4) & (ASCII character 167) & (ASCII character 90) & (ASCII character 112) & (ASCII character 0) & (ASCII character 0) & (ASCII character 255) & (ASCII character 255) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 30) & (ASCII character 4) & (ASCII character 167) & (ASCII character 90) & (ASCII character 116) & (ASCII character 0) & (ASCII character 128) & (ASCII character 255) & (ASCII character 255) & (ASCII character 0) & (ASCII character 0) & (ASCII character 0) & (ASCII character 36) & (ASCII character 4) & (ASCII character 167) & (ASCII character 90) & (ASCII character 204) as string -- with stay open without startup screen- Resource
write rzr to alias (file_path & ":Contents:Resources:applet.rsrc" as Unicode text)
end RunMaker
on MakeScript()
script
global info, pid, timer
property cpuFloor : 2
property intervalCheckTime : 5 -- checks every 5 seconds
property appname : "LimeWire"
property timerFloor : 120 as integer -- 10mins - 120 times by the intervalCheckTime (approx)
property bugcheck : true
on run
set timer to 0 as integer
end run
on idle
pidOfRunningApp(appname)
getProcessInfo(pid)
set percentCpu to info as integer
if percentCpu ≤ cpuFloor then
set timer to timer + 1
if bugcheck then say timer --this is for testing
else
set timer to 0 as integer
end if
if timer < timerFloor then
return intervalCheckTime
else
my onquite()
end if
end idle
on onquite()
tell application appname to quit
tell me to quit
end onquite
on quit
continue quit
end quit
on pidOfRunningApp(appname)
tell application "System Events"
try
set pid to the unix id of process appname
on error
set pid to -1
end try
end tell
return pid
end pidOfRunningApp
on getProcessInfo(pid)
set info to paragraph 2 of (do shell script "ps -auwx -p " & pid & " | awk '{print $3}'")
end getProcessInfo
end script
end MakeScript
I’m trying to make a script to quit my PrinterProxy application when it’s not processing anymore. I tried the script above from mark hunte and changed the appname to “PrinterProxy”. But when I’m running it i have the error message Can’t get paragraph 2 of “”.
I think it’s related to the (set info to paragraph 2 of (do shell script “ps -auwx -p " & pid & " | awk ‘{print $3}’”)) part. But I don’t know why and how to fix it. Any ideas?