From owner-freebsd-bugs@FreeBSD.ORG Thu Dec 29 13:40:20 2005 Return-Path: X-Original-To: freebsd-bugs@hub.freebsd.org Delivered-To: freebsd-bugs@hub.freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id C1D2B16A4CF for ; Thu, 29 Dec 2005 13:40:20 +0000 (GMT) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [216.136.204.21]) by mx1.FreeBSD.org (Postfix) with ESMTP id 5F7C643D8B for ; Thu, 29 Dec 2005 13:40:10 +0000 (GMT) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) by freefall.freebsd.org (8.13.4/8.13.4) with ESMTP id jBTDe9nR002801 for ; Thu, 29 Dec 2005 13:40:09 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.13.4/8.13.4/Submit) id jBTDe9CE002800; Thu, 29 Dec 2005 13:40:09 GMT (envelope-from gnats) Date: Thu, 29 Dec 2005 13:40:09 GMT Message-Id: <200512291340.jBTDe9CE002800@freefall.freebsd.org> To: freebsd-bugs@FreeBSD.org From: Kostik Belousov Cc: Subject: Re: bin/64198: init(8) may keep zombies X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: Kostik Belousov List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 29 Dec 2005 13:40:20 -0000 The following reply was made to PR bin/64198; it has been noted by GNATS. From: Kostik Belousov To: bug-followup@FreeBSD.org, eugen@grosbein.pp.ru Cc: Subject: Re: bin/64198: init(8) may keep zombies Date: Thu, 29 Dec 2005 15:35:23 +0200 The following patch fixes cosmetic problem with zombie. For RE state in ps output, see PR/91044. Index: sbin/init/init.c =================================================================== RCS file: /usr/local/arch/ncvs/src/sbin/init/init.c,v retrieving revision 1.61 diff -u -r1.61 init.c --- sbin/init/init.c 15 Sep 2005 13:16:07 -0000 1.61 +++ sbin/init/init.c 28 Dec 2005 15:56:06 -0000 @@ -1066,6 +1066,7 @@ pid_t pid; sigset_t mask; char term[64], *env[2]; + int status; if ((pid = fork()) == -1) { emergency("can't fork for window system on port %s: %m", @@ -1073,9 +1074,20 @@ /* hope that getty fails and we can try again */ return; } - if (pid) + { + waitpid(-1, &status, 0); return; + } + + /* reparent window process to the init to not make a zombie on exit */ + if ((pid = fork()) == -1) { + emergency("can't fork for window system on port %s: %m", + sp->se_device); + _exit(1); + } + if (pid) + _exit(0); sigemptyset(&mask); sigprocmask(SIG_SETMASK, &mask, (sigset_t *) 0);