Automatic application quit after a delay?

Hi,

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 ?

Thanks in advance.

Robert

Moving to OS X.

This I know can be improved…

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

mark,

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)

Although I already know about PS, I’m am lazy also and just had the example to hand.

Thanks though for the [ ] tip I would usually use grep -v grep and other bits to lose the extra lines

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.

dub

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

Works great so far. Thanks a lot Mark for being so helpful and knowledgable. Very impressive.

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?

Thanks in advance.

  • Twider -