Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl Monk, Perl Meditation

Re: Re: Re: Review of Proc::Background

by diotalevi (Canon)
on Mar 24, 2004 at 23:10 UTC ( #339585=note: print w/replies, xml ) Need Help??

in reply to Re: Re: Review of Proc::Background
in thread Proc::Background

In the following code sample the database connection cannot be started until after Proc::Background::Init because DBI connections do not survive forks. The fork has to happen before the potentially fatal register_process() because you wouldn't want to write the wrong pid to the process list. This leaves you with no way to report a fatal exit to the console that just started the application.

exit main( @ARGV ); sub main { eval { Sys::Syslog::openlog( $SYSLOG_IDENT, '', $SYSLOG_FACILITY ); 1; } or Carp::croak( $@ ); Proc::Background::Init(); db_start(); # <- The database connection cannot be established ... } sub db_start { return if $::DBH; main::log_debug( "DBI->connect" ) if $::DEBUG; $::DBH = DBI->connect ( $::DBI_DSN, $::DBI_USER, $::DBI_PASS, { RaiseError => 1, PrintError => 0, AutoCommit => 1 } ) or main::log_emerg( 'emerg', "Error connecting to database: $D +BI::errstr" ); # Potentially fatal - if the process is already running that would + violate the table's constraint system. $::DBH->do( "SELECT register_process( ?, ? )", undef, File::Basename::basename( $0 ), $$ ); return 1; }

Replies are listed 'Best First'.
Re: Re: Re: Re: Review of Proc::Background
by flyingmoose (Priest) on Mar 25, 2004 at 01:30 UTC

    ProcBackground::Init() is not mentioned on the Proc::Background CPAN page, hence I have not used it. I have been using the OO interface as documented in the POD.

    And again, the documentation on that CPAN page is about using Proc::Background to start outside processes, not to start pieces of your program in a new process. It is not a drop-in fork replacement, nor do the docs imply this to me.

    METHODS new [options] command, [arg, [arg, ...]] new [options] 'command [arg [arg ...]]'

    All of these functions take commands as arguments, as they would be invoked by system(""). Perhaps you are using an internal API you are not meant to use? It is not documented!

      Oh heck. You know, I've been thinking of Proc::Daemon this entire time. Foo on me.
        Good deal, I didn't think it had super-cow powers like that :)

        I suggest we consider this sub-thread for deletion so not as to confuse everyone...pull the trigger if you want.

Log In?

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

How do I use this? | Other CB clients
Other Users?
Others chilling in the Monastery: (2)
As of 2023-06-06 01:56 GMT
Find Nodes?
    Voting Booth?
    How often do you go to conferences?

    Results (26 votes). Check out past polls.