Re: Creating an executer

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 5/25/07, Daniel Brown <parasane@xxxxxxxxx> wrote:
On 5/24/07, Richard Lynch <ceo@xxxxxxxxx> wrote:
> I only skimmed this, but afaik the only way to get the child PID is to
> "fork" rather than to "exec".
>
> On Thu, May 24, 2007 10:10 am, lists@xxxxxxxxxxx wrote:
> > Hi,
> >
> > Summary:
> >
> > 1. I execute script1 that will run in the background (daemon)
> > 2. script1 needs to execute script2 and capture STDERR, STDOUT and
> > exitcode from script2 if script2 exits before SIGTERM is received.
> > 3. If I send SIGTERM to script1 it should kill script2, and write to
> > DB (or log  file some information that it was stopped)
> >
> > Simple, isn't it? But I cannot seam to get it to work. Anyone with
> > some example code that does the same thing?
> >
> >
> > =========
> >
> > More complex description
> >
> > I have some scripts (perl, c, php, or anything else) that simple
> > independent scripts that do some stuff and output STDOUT and STDERR
> > and exit with an exitcode. There scripts will be kept like this, and
> > will not change their behavior.
> >
> > Now I need to control them and also log their STDOUT, STDERR and
> > exitcode. Ok, that far I have come, so that I am logging the STDOUT,
> > STDERR and exitcode. What I am doing is that I have created an
> > executer that takes care of this and writing it to DB.
> >
> > Now I need to add a functionality so that when the executer receives a
> > SIGTERM signal it should kill the script (that was started with a
> > exec() call, and then log some information to the DB (that the script
> > was killed etc).
> >
> > I have registered the signal SIGTERM with pcntl_signal(SIGTERM,
> > "sig_handler"). When I am testing I just write some info to a file
> > when the signal is received. I created a simple testing script with a
> > while(true) loop and then send the signal to the script and it
> > successfully writes the information to the logflie.
> >
> > Ok, now I instead of a while(true) loop make an exec() call to a
> > script (that is running for ever) and send the signal, then it does
> > not write to the file as it is supposed to. I guess it is because the
> > script is busy running the exec command.
> >
> > I tried to then exec() it in the background. The problem there is that
> > it becomes a daemon and then I cannot know what that script is doing,
> > and it will not send any SIGCHLD to the parent, or it does, but to
> > init. Or actually there will be a SIGCHLD sent, as the exec() will
> > open its own shell, and then the shell will exit and we get the
> > SIGCHLD from the shell instead of the executed script.
> >
> > Is there any way to get the "child" process PID when you exec() and
> > send it to the background? But then, how can I capture the exitcode?
> > The STDERR and STDOUT is fine as I can direct it to a file and get it
> > from there.
> >
> > I have a really ugly workarounds: I could append an dummy variable to
> > the execution of the script and then do a grep of the ps -ef to get
> > the PID of that script.
> >
> > /Peter
> >
> > --
> > PHP General Mailing List (http://www.php.net/)
> > To unsubscribe, visit: http://www.php.net/unsub.php
> >
> >
>
>
> --
> Some people have a "gift" link here.
> Know what I want?
> I want you to buy a CD from some indie artist.
> http://cdbaby.com/browse/from/lynch
> Yeah, I get a buck. So?
>
> --
> PHP General Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php
>
>

    If it helps, BASH has the $? and $! session variables that give
you the exit code and PID, respectively.

--
Daniel P. Brown
[office] (570-) 587-7080 Ext. 272
[mobile] (570-) 766-8107


   Oh, I also forgot to mention pidof.  If you use it with the -x
switch, it will give you shell script listing, too.

--
Daniel P. Brown
[office] (570-) 587-7080 Ext. 272
[mobile] (570-) 766-8107

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux