but now I would like to be able to kill the process started up from this call programmatically. For this, I need the pid, which the open call so kindly returns. Unfortunately setting the environment variables before hand, causes the open to return the process ID of the shell, and not the actual process.

This problem really has nothing to do with threads. The same problem will manifest itself in a single threaded process. Ie. If you use the shell to invoke the executable, you'll get the pid of the shell not the executable.

The solution is actually quite simple. Don't use the shell.

You are using the shell in order to set up the environment that the executable will inherit. But, if you set the environment of your process to that you want the executable to inherit and then spawn the executable directly -- bypassing the shell -- you achieve your goal.

Ie:

{ local %ENV = %ENV; ## make your additions (deletions, changes) here; $ENV{FOO} = 'BAR'; my $pid = open my $pipe, '-|', '/path/to/the/executable', @args or + die ...; sleep $someTime; kill KILL, $pid; } ## the changes to %ENV are undone once you reach here

That's untested pseudocode.


With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.

In reply to Re: Get the process id, and output of a process, in a threaded environment by BrowserUk
in thread Get the process id, and output of a process, in a threaded environment by rmahin

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.