FWIW Glibc implements posix_spawn on posix platforms in terms of {,v}fork + 
execve.
So that means that SIGCHLD can be used.

I don’t think linux has per-thread wd, since linux has had atcalls for a very 
long time, which makes this system interface not useful and only weird 
(pthread_{,f}chdir).

I don’t think there’s a good way to fix this beside asking for POSIX to have a 
posix_spawnattr_setwd(attr, const char *); or changing it around the spawn, 
which of course, is bad and racy

The other alternative is to use a trampoline execv() when -[NSTask 
currentDirectoryPath] has been set that will just chdir() and exec's again. 
it’s not really pretty but does the job. Given that this should be the 
exception and not the rule, maybe that’s acceptable.


-Pierre

> On Dec 18, 2015, at 11:37 AM, David Smith via swift-corelibs-dev 
> <swift-corelibs-dev@swift.org> wrote:
> 
> One issue that we ran into in the ObjC NSTask is setting the current working 
> directory in the child process. We worked around the lack of an API for that 
> by using per-thread working directories, which is kind of awful. I'm not up 
> to date on what the best approach to use for this on Linux would be; it 
> sounds like clone() can do it, but I don't know if that's exposed at the 
> posix_spawn level at all.
> 
>       David
> 
>> On Dec 18, 2015, at 11:08 AM, Dan Stenmark via swift-corelibs-dev 
>> <swift-corelibs-dev@swift.org> wrote:
>> 
>> I hope to take a crack at implementing some of NSTask this weekend.  What 
>> are the recommended posix_spawnattr_t flags that should be set?  Do we also 
>> want to take the opportunity to expose the ability to override some of these 
>> flags (like POSIX_SPAWN_SETPGROUP) or do we want to avoid tying this with 
>> posix_spawn() too closely?
>> 
>> Dan
>> _______________________________________________
>> swift-corelibs-dev mailing list
>> swift-corelibs-dev@swift.org
>> https://lists.swift.org/mailman/listinfo/swift-corelibs-dev
> 
> _______________________________________________
> swift-corelibs-dev mailing list
> swift-corelibs-dev@swift.org
> https://lists.swift.org/mailman/listinfo/swift-corelibs-dev

_______________________________________________
swift-corelibs-dev mailing list
swift-corelibs-dev@swift.org
https://lists.swift.org/mailman/listinfo/swift-corelibs-dev

Reply via email to