On 6/6/12 8:22 AM, John E. Malmberg wrote: > The existing port of Bash for VMS claims to be 1.4.8, which as near as I > can tell must be based on 1.4.7, as I do not see a 1.4.8 in the download > section. > > What they did to work around that VMS does not have a fork() call, is to: > > Make a copy of several global variables and structures. > Set the global variables to point to the copy. > set a stack local structure to point to the original values. > > And then at a later point where the child processes has exited: > Set the global variables to point to the original structures > Dispose of the copy. > > Since then, the structure of Bash and the global variables has changed a bit. > > So what I am trying to find is where in Bash 4.2 that I should be putting > the save/restore, what variables need to be copied/saved/restored, and what > the best routines to do that.
Their approach was to define `shell state', and save and restore it. That's not a bad approach, but the semantics of fork require that you save and restore everything that a child shell could possibly touch or modify, since the definition of fork() requires that the child process not be able to modify anything in its parent's address sapce. That's pretty daunting. It might be worth spending some time to figure out how VMS creates processes and whether or not one of those primitives could be adapted to create a fork() function. > And where I can just set a flag to avoid the fork() operation all together. You can't. -- ``The lyf so short, the craft so long to lerne.'' - Chaucer ``Ars longa, vita brevis'' - Hippocrates Chet Ramey, ITS, CWRU c...@case.edu http://cnswww.cns.cwru.edu/~chet/