in reply to Re: join() in perl threads does not return
in thread join() in perl threads does not return

I tried without thread->kill() but still the joining of threads just freezes without returning.

Replies are listed 'Best First'.
Re: join() in perl threads does not return
by BrowserUk (Patriarch) on Oct 03, 2016 at 06:26 UTC

    Hm. In that case you'll need to post actual code, that is runnable and demonstrates the problem.

    • Actual code:

      Ie. This code: $gdbserver_path :6000 $Exe_path 1> NUL 2> NUL` ; from your OP, is not valid Perl.

      1. There is an unmatched backtick (`) at the end of the line, but none at the start.
      2. Whilst not illegal, a command line parameter that starts ':' is unusual.
      3. You are redirecting both stdout and stderr to nul, then what is the point of backticks? (They are designed to return the output of the spawned program to the spawner.)
      4. Ditto: Why use backticks (rather than system) if you aren't going to assign the output to a variable and use it?
    • Runnable: means that we will have a good chance of running the code you post.

      Ie. It mustn't have dependencies that we cannot have access to -- like modules that are your companies intellectual property.

      We don't need to have the executable you are running, we can mock that up using a perl 1-liner.

    • demonstrates the problem: hopefully, self explanatory.

    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". I knew I was on the right track :)
    In the absence of evidence, opinion is indistinguishable from prejudice.
      Ya there is a backtick at the beginning as well. Must have been left out while copying

        In the absence of code that demonstrates the problem, it is hard to move forward.

        A simplistic test of the problem as described shows that the join works fine:

        [0]{} Perl> print async{ `perl -e1`; return 'Completed'; }->join;; Completed [0]{} Perl>

        The backticks ran in a void context, running an executable that produced no output; the thread ended returning the string 'Completed'; which was retrieved with join, and passed to print and displayed.


        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". I knew I was on the right track :)
        In the absence of evidence, opinion is indistinguishable from prejudice.