Beefy Boxes and Bandwidth Generously Provided by pair Networks
There's more than one way to do things
 
PerlMonks  

debugger problem with system calls

by gerry (Sexton)
on Dec 07, 2004 at 16:45 UTC ( [id://412938]=perlquestion: print w/replies, xml ) Need Help??

gerry has asked for the wisdom of the Perl Monks concerning the following question:

I'm using perl5.6.1 and am trying to debug a program that creates a background process via a system call. The following is the affected code.
if ( $pid eq "" ) # if null, MEVS not running - issue comm +and to start MEVS { @command = ("/mevs/$version/bin/mevs", "/mevs/$version/data/con +fig_data/mevs2.cfg", "online"); system(@command, "&"); # restart MEVS $pid = get_pid($version); # Get the current $version mevs pid chomp $pid; # chomp if not null print STATUSLOG "\n\n$ctime [$pid] -- MEVS Status Log -- The M +EVS Online process has been restarted\n\n";
The problem is that the debugger goes into a wait state for a response as the following shows:
DB<1> b 151 DB<2> c MEVS 2.0, Medicaid Eligibility Verification Server, (c)2003. Done. 12/07/04 @ 11:13:41 : MEVS started in Online mode, on port 6500, with +20 listening slots.
I no longer get any DB<> prompts. It seems it just hangs. I know I created a background process because I can kill the perl process and the MEVS system is still running.

Replies are listed 'Best First'.
Re: debugger problem with system calls
by tilly (Archbishop) on Dec 07, 2004 at 17:01 UTC
    You are not, contrary to your belief, launching a background process.

    If you call system with a list of arguments it is not interpreted by the shell, instead Perl launches the appropriate process with the list of arguments passed in directly (so shell metacharacters are not interpreted as such).

    You want to do something more like:

    system(join " ", @command, "&");
    As for your test from which you believed that the process was backgrounded, under Unix if you create a child process and then kill the parent, the child process just continues and is reparented. So your test for whether you created a background process only really tested to show that you created a process.
      Thank you very much for your help. Gerry

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others making s'mores by the fire in the courtyard of the Monastery: (5)
As of 2024-04-19 06:36 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found