[launchd-dev] launchd-dev Digest, Vol 15, Issue 10
Ryan McGann
rmcgann at mac.com
Thu Sep 25 09:36:13 PDT 2008
On Sep 25, 2008, at 7:00 AM, launchd-dev-request at lists.macosforge.org
wrote:
>> I'm wondering about the relationship between NetworkState and the
>> networking
>> stack. I haven't found a reference about the KeepAlive/NetworkState
>> value
>> and the relative order in launching jobs with it versus the loading
>> of the
>> network stack.
>>
>> When NetworkState is true, will that result in a job that starts
>> before,
>> during, or after the loading of the network stack? Is that order
>> guaranteed?
>
> Ultimately, I'd like to launch something _before_ the network stack
> has
> loaded, but only really need load it when -- and as long as -- the
> network
> stack will be active.
Jeremy,
launchd and the mechanisms it uses to receive notification that the
network stack is up are asynchronous and callback-oriented, which
means there is no guarantee of ordering. When launchd is notified an
IP address has been assigned to an interface, the network stack is
already "up", so there's no way to use NetworkState to be called
before interfaces have had any addresses assigned to them. Even so,
with all the launchd plists installed by Leopard, it's very likely
that by the time launchd gets around to loading your process, the
network is already up and sending out mDNS packets (on a Mac Pro that
uses a static IP address with wired Ethernet, an interface coming
online happens *very* early and *very* quickly during system
startup) . On my latest-gen iMac, we're process ID 50 and the network
is very much alive when we load.
However you could set the RunAtLoad key, which will start your daemon
as soon as the machine starts up. The network may already be up at
that point so you should use SystemConfiguration/
SCNetworkCheckReachability/ifconfig/etc to check if the network is
already up, and do your work appropriately. Otherwise it could exit,
and hope the network doesn't come online while you are exiting (as I
think there's a race condition in there that we've experienced). When
the network goes offline, launchd should then ask you to exit, and
then relaunch you as necessary.
If you absolutely must be guaranteed that your daemon is called before
any addresses are assigned to the machine, you cannot use launchd.
Again, this is all from my experience—somebody else might prove me
wrong.
Ryan
More information about the launchd-dev
mailing list