[launchd-dev] Programmatic interface to launchctl and some other questions, OS X 10.5

Quinn "The Eskimo!" eskimo1 at apple.com
Tue Oct 26 02:13:09 PDT 2010


On 26 Oct 2010, at 03:55, Jerry Krinock wrote:

> On 2010 Oct 25, at 18:01, eveningnick eveningnick wrote:
> 
>> Also there's a /usr/include/launch.h file, which provides some kind of
>> API, but i've no idea how to use it, and i am not sure if it gives any
>> means to load/start/stop/unload agents. Maybe i could use it somehow?
> 
> Anyone know what he's talking about?

The routines in <launch.h> provide necessary services for launchd jobs (daemons and agents).  Specifically, a launchd job uses this API to check in with launchd.  See SampleD for an example of this.

<http://developer.apple.com/library/mac/#samplecode/SampleD/>

If you need to manipulate the launchd state, you should use Service Management (if it's available and does what you want) or simply fork/exec launchctl.  And yes, it is both sad and a chore )-:

>> how can i determine, if my agent is running or not, from my Cocoa
>> application? and how could i determine if it's registered (loaded, in
>> terms of launchctl) or not? Calling [NSTask launchProcess:@"launchctl
>> list | grep com.mycompany.myagent"] and then parsing the returned
>> string seems wrong to me :/. Is it really the only choice?
> 
> That's the only choice that I know of.  Again, this is quite sad.

The approach I usually use here (for example, this is what BAS shows) is to have my launchd job provide a service, and then try to connect to that service.  If the connection works, the job must be installed properly.  If the connection fails, some corrective action is necessary.

S+E
--
Quinn "The Eskimo!"                    <http://www.apple.com/developer/>
Apple Developer Relations, Developer Technical Support, Core OS/Hardware




More information about the launchd-dev mailing list