Hello

I thought this would be interesting to those who followed the "Re: [Dev]
HOWTO write a daemon" thread.

JD
---------------------- Forwarded by John F Davis/Raleigh/IBM on 05/29/2002
02:10 PM ---------------------------

Glynn Clements <[EMAIL PROTECTED]>@vger.kernel.org on 05/29/2002
05:29:36 AM

Sent by:    [EMAIL PROTECTED]


To:    Sindunata <[EMAIL PROTECTED]>
cc:    [EMAIL PROTECTED]
Subject:    Re: simple daemon dies




Sindunata wrote:

> I'm trying to write a simple daemon background process.
> It connects to PostgreSQL and wait for a notify event and upon receiving
> some event will invoke some URL using curl library.
>
> I got it working already if I run it in foreground. But if I put the
> process in background (using &), and then after sometime the process
> will die.

In which case, the shell will tell you why it died.

Exited normally with zero status:

 [1]+  Done                    prog

Exited normally with non-zero status:

 [1]+  Exit 1                  prog

Terminated due to SIGTERM:

 [1]+  Terminated              prog

Terminated due to SIGIOT (aka SIGABRT):

 [1]+  Aborted                 (core dumped) prog

Terminated due to SIGKILL:

 [1]+  Killed                  prog

... and so on.

> I think there's some signal that I need to catch, can
> someone please help me?

You don't necessarily *need* to catch any signals. Most of the signals
which terminate a process (e.g. SIGHUP, SIGTERM, SIGINT) are *meant*
to terminate the process. When a program catches one of these signals,
it's normally so that it can "clean up" before it terminates, not to
prevent termination altogether.

> Currently i'm trapping the following signals:

>   sigaction (SIGTERM, &act, NULL);
>   sigaction (SIGINT, &act, NULL);

These are meant to kill the process; there's no reason to catch them.

>   /* ignore SIGHUP  & SIGTTOU */
>   act.sa_handler = SIG_IGN;
>   sigaction(SIGHUP, &act, NULL);

Same here.

>   sigaction(SIGTTOU, &act, NULL);

This will only stop the process, not terminate it.

If you're trying to write a daemon (as opposed to simply running in
the background), the process should be entirely disassociating itself
from the terminal and from the process group, so it shouldn't be
affected by terminal-related signals.

--
Glynn Clements <[EMAIL PROTECTED]>
-
To unsubscribe from this list: send the line "unsubscribe
linux-c-programming" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


_______________________________________________
Dev mailing list
[EMAIL PROTECTED]
http://www.trilug.org/mailman/listinfo/dev

Reply via email to