Beefy Boxes and Bandwidth Generously Provided by pair Networks
Problems? Is your data what you think it is?
 
PerlMonks  

Re: Running a perl script as a system command in another thread hangs while main thread reading from STDIN

by BrowserUk (Patriarch)
on Sep 30, 2014 at 00:31 UTC ( [id://1102397]=note: print w/replies, xml ) Need Help??


in reply to Running a perl script as a system command in another thread hangs while main thread reading from STDIN

I see no difference between the two runs of the program;

and nor would I expect to.

The threads won't terminate until they are joined; and they won't be joined until the code moves past <STDIN>; to the join loop.


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.
  • Comment on Re: Running a perl script as a system command in another thread hangs while main thread reading from STDIN
  • Select or Download Code

Replies are listed 'Best First'.
Re^2: Running a perl script as a system command in another thread hangs while main thread reading from STDIN
by rmahin (Scribe) on Sep 30, 2014 at 01:04 UTC

    Thanks for your response. Well, shoot. I tested this again on my Windows 7 machine, actually running from command line (before was running from the built in shell of Komodo Edit) and I do see that it works as expected. I apologize for the incorrect assessment. Tested against a Windows 2008 R2 machine, and saw the correct behavior as well. Windows 2012 R2 however, is still behaving abnormally. I tested on another Windows 2012 (not R2) and found the same problem. I'm glad this is the case, considering the 2012 machine is where we first noticed the problem, and this means we do not all of a sudden have a widespread problem in our code. However, it does not help me solve the problem. Which there is...somewhere.

    The trouble is not with the threads terminating (agreed, the message I printed was misleading), but with the system command being run. Perl processes start up, but they do not terminate. Given that I'm executing a single print statement I would expect these processes to disappear rather quickly and not linger until I hit enter in the test script. Have any ideas or advice on how to debug this issue further?

    C:\>perl -v This is perl 5, version 18, subversion 2 (v5.18.2) built for MSWin32-x +64-multi-thread (with 1 registered patch, see perl -V for more detail) Copyright 1987-2013, Larry Wall Binary build 1801 [297964] provided by ActiveState http://www.ActiveSt +ate.com Built Feb 24 2014 11:06:47 Perl may be copied only under the terms of either the Artistic License + or the GNU General Public License, which may be found in the Perl 5 source ki +t. Complete documentation for Perl, including FAQ lists, should be found +on this system using "man perl" or "perldoc perl". If you have access to + the Internet, point your browser at http://www.perl.org/, the Perl Home Pa +ge. C:\>perl test.pl 1 ### Running a perl script ### 0s : Thread 0 - > Creating threads 0s : Thread 1 - Created 0s : Thread 2 - Created 0s : Thread 3 - Created 1s : Thread 0 - All Threads created 1s : Thread 0 - > Waiting for input now. All system commands should fi +nish without pressing enter 3s : Thread 2 - Starting 'perl -e "print \"hello world\""' 3s : Thread 3 - Starting 'perl -e "print \"hello world\""' 3s : Thread 1 - Starting 'perl -e "print \"hello world\""' 68s : Thread 0 - > Input received, all done 68s : Thread 1 - Finished the command: hello world 68s : Thread 2 - Finished the command: hello world 68s : Thread 3 - Finished the command: hello world 68s : Thread 0 - All Threads joined

      Could you try adding the -l option to your perl one line and try it on the errant system(s).


      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.

        Tried as you suggested, and there was no change at all :/

        C:\>test.pl 1 ### Running a perl script ### 0s : Thread 0 - > Creating threads 0s : Thread 1 - Created 0s : Thread 2 - Created 0s : Thread 3 - Created 1s : Thread 0 - All Threads created 1s : Thread 0 - > Waiting for input now. All threads should finish now + without pressing enter 3s : Thread 1 - Starting 'perl -le "print \"hello world\""' 3s : Thread 2 - Starting 'perl -le "print \"hello world\""' 3s : Thread 3 - Starting 'perl -le "print \"hello world\""' 17s : Thread 0 - > Input received, all done 17s : Thread 2 - Finished the command: hello world 17s : Thread 3 - Finished the command: hello world 17s : Thread 1 - Finished the command: hello world 17s : Thread 0 - All Threads joined

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1102397]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others pondering the Monastery: (6)
As of 2024-04-18 13:56 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found