Re: Zombies

From: Bernd Walter <ticso(at)cicely9.cicely.de>
Date: Wed, 26 Mar 2003 19:45:44 +0100

On Wed, Mar 26, 2003 at 07:24:00PM +0100, Dieter Deinert wrote:
> Am Mittwoch, 26. März 2003 18:34 schrieb Oliver Fromme:
> > Ich kenne sntop nicht, tippe aber mal darauf, daß es einen
> > Bug haben muß, der dazu führt, daß es den Exit-code seines
> > Child-Prozesses (d.h. Deines Shell-Skripts) nicht abholt.
> > Sowas führt halt dazu, daß der Prozeß als Zombie verbleibt,
> > bis das sntop seinen elterlichen Pflichten nachkommt.
>
> Hier ist glaube ich, das Stueck Code dafuer. Mach mal ein ROTES Haecken
> wenn du'einen Fehler siehste ;-)
> -------------------------------------------------------------------------------------------------------
> void exec_alarm(char *command, char *name, char *host, char *status)
> {
> extern char **environ;
> int pid;
> pid = fork();
> if (pid == -1) return;
> if (pid == 0) {
> char *argv[5];
> argv[1] = name;
> argv[2] = host;
> argv[3] = status;
> argv[4] = NULL;
> if (execve(command, argv, environ) == -1)
> abortion("error executing alarm command", 7);
> }
> }

Wenn du Kinder zeugst, dann solltest du die auch hüten.
Auf Unix heißt das du brauchst einen Handler für SIGCHLD.
siginit() muß irgendwann beim starten vor dem ersten fork ausgeführt
werden.

void
siginit() {
        struct sigaction sa;

        sa.sa_handler = sighandler;
        sigemptyset(&sa.sa_mask);
        sa.sa_flags = 0;
        sigaction(SIGCHLD, &sa, NULL);
}

void
sighandler(int sig) {
        pid_t pid;
        int status;

        switch (sig) {
        case SIGCHLD:
                do {
                        pid = waitpid(-1, &status, WNOHANG);
                } while (pid > 0);
                break;
        default:
                break;
        }
}

-- 
B.Walter                   BWCT                http://www.bwct.de
ticso(at)bwct.de                                  info(at)bwct.de
To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Wed 26 Mar 2003 - 19:46:08 CET

search this site