Greetings once again, fellow Monks.

I have some code which forks a number of children to carry out a number of tasks in parallel.
Each child calls File::Temp::tempfile() to create a temporary file and some (non-perl) code is written to the temporary file and the filehandle closed. An external command is then called to execute the code in the temporary files.

The code regularly fails to create a unique filename - File::Temp croaks after 10 attempts to guess another unique name (the 10 attempts is a constant hardcoded in the module's source).
After rummaging around in File::Temp's guts and inserting some print statements for debugging, it seems that each of children try to use the same strings for the temporary filename(s).

I've worked around this by modifying File::Temp to include the process ID ($$) on the end of any filenames, but I feel this is a less-than-ideal solution.
Security and/or paranoia isn't a primary concern, so having process IDs in filenames doesn't worry me too much.

Could someone explain to me why the randomness of the temporary filenames in multiple processes isn't exactly random and suggest any other solutions/hacks to workaround the problem?

Cheers,

BazB.


If the information in this post is inaccurate, or just plain wrong, don't just downvote - please post explaining what's wrong.
That way everyone learns.


In reply to Poor randomness with File::Temp and fork(). by BazB

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.