On 4 Dec, 2013, at 12:58, Norman Gray <nor...@astro.gla.ac.uk> wrote:
> Damien (and Jerry), hello.
> 
> On 2013 Dec 4, at 20:10, Damien Sorresso <dsorre...@apple.com> wrote:
> 
>> On 4 Dec, 2013, at 12:05, Jerry Krinock <je...@ieee.org> wrote:
>>> On 2013 Dec 04, at 11:22, Damien Sorresso <dsorre...@apple.com> wrote:
>>> 
>>>> Why not just set a relevant environment variable or pass an argument 
>>>> that's different in each plist?
>>> 
>>> I’ve done that, Damien, but like Norman I have wondered why the job’s 
>>> parameters are not more readily available.  
>> 
>> Because the launchd.plist is not a preferences container. It's not meant to 
>> be a state store.
> 
> Sure, and I'm storing the actual state in preferences, using NSUserDefaults.  
> All I really want to know is "Have I been invoked from A.plist or B.plist?"
> 
> I've tried setting an environment variable, and passing an --ident option to 
> the program.  That does work, but in each case it involves copying the Label 
> from one part of the plist to another: that looks ugly, is redundant, and 
> requires extra documentation ("Copy the Label to the --ident option; don't 
> ask why...").
> 
> I've even resorted to concatenating various arguments and options, and using 
> that as the 'identifier', but that ends up looking needlessly obscure.  In 
> fact, if I could read the Label and (in my case) the WatchPaths from the 
> calling environment, then several of my program options would disappear.
> 
> So I'm not thinking of the job parameters as _state_, quite, but as part of 
> the program launch environment.  Rather than (argc, argv, environ), it's 
> effectively (argc, argv, environ, plist).  That's not traditional unix, of 
> course, but then launchd isn't traditional unix either.

It seems like you're basing a ton of behaviors simply on the job's label. Why 
do they have to be based on that? That said, I think it's reasonable to export 
the job's label in an environment variable or something. But plist is not there 
as part of the program's environment. It *defines* the program's environment.

Also, I can see how WatchPaths are clumsy in this case, but then again, the 
entire mechanism of WatchPaths is clumsy. You're virtually guaranteed to miss 
modifications a certain amount of the time, and you have no guarantee that the 
write which triggered the modification event left the file in a consistent 
state anyway. 

>> If you need to modify your program's behavior, you should specify different 
>> arguments or a different environment in the plist. That is what those 
>> entries are for.
> 
> Indeed, but in this case the information being communicated is information 
> about the plist itself, which seems... clumsy.  That in turn makes me suspect 
> I'm doing something the Hard Way.
> 
> @Graham: thanks.  launch_data_dict_lookup looks like it would do the job, and 
> demonstrates that Apple feel that the information is legitimately available 
> in at least some circumstances. But the fact that it's not documented 
> _anywhere_ I can find (other than being implicitly documented as part of 
> Apple example code), makes me nervous of using it.
> 
> All the best,

Those interfaces are really only so that jobs can check in with launchd to 
obtain listening sockets. They were way too general at the outset.
-- 
Damien Sorresso
dsorre...@apple.com

_______________________________________________
launchd-dev mailing list
launchd-dev@lists.macosforge.org
https://lists.macosforge.org/mailman/listinfo/launchd-dev

Reply via email to