On Mar 11, 2007, at 10:39 AM, Joël Brogniart wrote:
A nice feature of SystemStartup is the notion of dependancies, ie the ability to spécify that a process is dependant of other processes. I don't see anything similar in launchd documentation. Do I have missed something in the doc or this feature doesn't exist with launchd?
Hi Joël, There's a relatively large conceptual change with launchd that can easily be missed. With SystemStarter, a "dependency" was merely a means to order the execution of StartupItem scripts. It was more flexible, but not more powerful, than executing a set of scripts in a directory in lexical order. The became problematic when a script changed between releases (due to underlying technology changes). The behavior you got while depending on "Network" in 10.2 might not exactly correspond to the behavior you got while depending on "Network" on 10.3. The key concept to launchd is to use actual operating system primitives for dependencies, not just names. What does that mean? Well, in practical terms, a process really doesn't depend on another process unless it communicates with it in some way. Let's say you have a process that depends on the PostgreSQL database -- that essentially boils down to the process assuming that Postgres' UNIX domain socket exists (/tmp/.s.PGSQL.4321). The launchd approach means that the Postgres property list specifies that UNIX domain socket. During startup, launchd initializes all of the UNIX domain sockets, network sockets, mach services, etc. When your process runs, it can successfully connect the Postgres socket. This connection, in turn, triggers launchd to start up Postgres on demand. The calling process blocks until Postgres bring-up is complete, then Postgres services the request, and the "dependency" has been fulfilled. It's akin to virtual memory paging -- where a large address space is always virtually available, and actual use of pages cases the page to be brought into memory as necessary. Launchd strives to make all system services virtually available, and start them as they are required. - Kevin