You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@httpd.apache.org by Alexei Kosut <ak...@organic.com> on 1997/08/12 04:00:10 UTC

sig_term

Let me quote from http_main.c:

void sig_term(int sig) {
    log_error("httpd: caught SIGTERM, shutting down", server_conf);
    cleanup_scoreboard();
#ifdef SIGKILL
    ap_killpg (pgrp, SIGKILL);
#endif /* SIGKILL */
    close(sd);
    exit(1);
}

I realize this code has been there since Apache 0.8, but it just decided
to annoy me. AFAIK, a TERM signal is the perferred method of shutting
Apache down. I know of no other way to do it, at least. So when one turns
Apache off, in a presumably graceful way, it sends a KILL to all its
children.

I can't possibly be the first person to run up against this problem:
There seems to be no way to have anything occur when Apache shuts
down. When Apache is restarted, it sends a SIGHUP to its children, which
allows them to do things. For example, they call the child_exit API
phase (in Apache 1.3), then they exit normally and send a SIGTERM to the
children's children (if you have running CGI scripts or whatnot).

No such luck with a shutdown. In fact, I believe I should veto
(retroactively) adding the child_exit phase, since it doesn't, in fact,
get called when a child exits when the server is shut down. It's
misleading and not all that useful.

The reason that I'm trying to do this is that I have module with a
process that I fork off in my initialization phase that I want to shut
down gracefully when Apache shuts down. Since I can't very well use
signal(SIGKILL), I haven't been able to do this. The only thing I can
think of is to call setpgid() to change my process group so I don't get
killed by the killpg when Apache dies, then poll getppid() to see if it
changes to 1.

But I'd really perfer not to do that. Have I missed something?

-- Alexei Kosut <ak...@organic.com>


Re: sig_term

Posted by Dean Gaudet <dg...@arctic.org>.
You're not the first, see my big accept_mutex patch where I use atexit() 
but also stuff something into sig_term. 

Dean

On Mon, 11 Aug 1997, Alexei Kosut wrote:

> Let me quote from http_main.c:
> 
> void sig_term(int sig) {
>     log_error("httpd: caught SIGTERM, shutting down", server_conf);
>     cleanup_scoreboard();
> #ifdef SIGKILL
>     ap_killpg (pgrp, SIGKILL);
> #endif /* SIGKILL */
>     close(sd);
>     exit(1);
> }
> 
> I realize this code has been there since Apache 0.8, but it just decided
> to annoy me. AFAIK, a TERM signal is the perferred method of shutting
> Apache down. I know of no other way to do it, at least. So when one turns
> Apache off, in a presumably graceful way, it sends a KILL to all its
> children.
> 
> I can't possibly be the first person to run up against this problem:
> There seems to be no way to have anything occur when Apache shuts
> down. When Apache is restarted, it sends a SIGHUP to its children, which
> allows them to do things. For example, they call the child_exit API
> phase (in Apache 1.3), then they exit normally and send a SIGTERM to the
> children's children (if you have running CGI scripts or whatnot).
> 
> No such luck with a shutdown. In fact, I believe I should veto
> (retroactively) adding the child_exit phase, since it doesn't, in fact,
> get called when a child exits when the server is shut down. It's
> misleading and not all that useful.
> 
> The reason that I'm trying to do this is that I have module with a
> process that I fork off in my initialization phase that I want to shut
> down gracefully when Apache shuts down. Since I can't very well use
> signal(SIGKILL), I haven't been able to do this. The only thing I can
> think of is to call setpgid() to change my process group so I don't get
> killed by the killpg when Apache dies, then poll getppid() to see if it
> changes to 1.
> 
> But I'd really perfer not to do that. Have I missed something?
> 
> -- Alexei Kosut <ak...@organic.com>
> 
>