[launchd-dev] Agent started two different was,
two different bootstraps?
James Bucanek
subscriber at gloaming.com
Fri Jan 25 13:31:27 PST 2008
Dave Zarzycki <mailto:zarzycki at apple.com> wrote (Friday, January
25, 2008 12:13 PM -0800):
>
>-S, not -s, but otherwise, that is probably the solution.
Dave, Hamish,
That seems to be the problem.
If I load the agent using
launchctl load com.qrecall.monitor.plist
it doesn't work. It runs, but can't connect to any processes
using Mach ports.
If I unload it and reload it using
launchctl load -S Aqua com.qrecall.monitor.plist
it works! It connects and communicate just fine.
As an experiment, I added
<key>LimitLoadToSessionType</key>
<string>Aqua</string>
to the plist and tried to load it again, with and without
specifying the sessiontype. Here's what I got:
crocodile:LaunchAgents james$ launchctl load com.qrecall.monitor.plist
nothing found to load
crocodile:LaunchAgents james$ launchctl load -S Aqua com.qrecall.monitor.plist
crocodile:LaunchAgents james$
So it appears issuing "launchctl load" as a user process is
assuming some other kind of sessiontype.
So I think there's definitely a bug here, although it's not the
more overt bug I thought it was.
1) As Hamish pointed out, LimitLoadToSessionType defaults to
Aqua. So in the absence of LimitLoadToSessionType, an agent
should only be loaded in the Aqua bootstrap/sessiontype.
2) If you include the LimitLoadToSessionType=Aqua in the plist,
'launchctl load' ignores the plist with "nothing to load." I now
realize that it's because the session types are different.
3) If you omit the LimitLoadToSessionType in the plist,
'launchctl load' loads the agent in whatever sessiontype it
defaults to, which is in contradiction to (1).
If this sounds reasonable, I'll file a bug report.
In the meantime I'll add -S Aqua to my initial load command.
--
James Bucanek
More information about the launchd-dev
mailing list