in reply to Logical Conundrum

Part of the point of separate processes is that they cannot access each other's memory. So no matter how you pass \$lock to a different process, it won't be able to do anything useful with it.

You need to use flock (or something similar) but on a different file for each user and this filename is what you pass to each subprocess, not \$lock. I'd use File::Temp to create these lock files safely.

Update: The original node says:

flock() is not an option for this, as this program will need to be able to be run by multiple users at the same time.
hence my suggestion and why I don't think merlyn's reply is in context.

                - tye

Replies are listed 'Best First'.
•Re: Re: Logical Conundrum (processes)
by merlyn (Sage) on Dec 01, 2003 at 18:42 UTC
      $0 may be unique to the script, but that is a BIG problem. What I have is a main program (parent) spawning a number of child programs. Each of the child programs is trying to print to <STDOUT>. What I am having is when 2 children are trying to print to <STDOUT> at the same time, the information gets mixed. By trying to set flock(), I am trying to prevent one child from printing to <STDOUT> while another child is in the middle of doing that. The end result should be that I don't have any mixed outputs.

      Problem is, the traditional uses of flock() aren't helping, they are creating either the same problem with the output, or they are creating runaway processes.

      I've created a file, "lock_file". I have a lock_ex subroutine that returns a file handle when it can create an exclusive lock. I need to check to see if that is in place, if so wait, if not go ahead and print to <STDOUT>.