From owner-freebsd-hackers@FreeBSD.ORG Thu Sep 8 19:40:21 2005 Return-Path: X-Original-To: freebsd-hackers@freebsd.org Delivered-To: freebsd-hackers@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 9ABCB16A41F for ; Thu, 8 Sep 2005 19:40:21 +0000 (GMT) (envelope-from erkankolemen@yahoo.com) Received: from web33415.mail.mud.yahoo.com (web33415.mail.mud.yahoo.com [68.142.206.147]) by mx1.FreeBSD.org (Postfix) with SMTP id 3F3A243D48 for ; Thu, 8 Sep 2005 19:40:21 +0000 (GMT) (envelope-from erkankolemen@yahoo.com) Received: (qmail 21637 invoked by uid 60001); 8 Sep 2005 19:40:20 -0000 DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=s1024; d=yahoo.com; h=Message-ID:Received:Date:From:Subject:To:MIME-Version:Content-Type:Content-Transfer-Encoding; b=zdqIrmIEYBlin0tP/+sOuSYFUbZFAwvHkHt505/ncgYFLo4PZALCFmItxGKIz3bA66AvjRzUlJorVTOmK5O8SHLJ41pJXMOYG3nfLNTdkC4IWqfdKAXbZeW6E9hASk4/nWBBiRZxfekuLRgHROG+dpxknaQFdt7spQqiwbHsOlE= ; Message-ID: <20050908194020.21635.qmail@web33415.mail.mud.yahoo.com> Received: from [81.214.137.234] by web33415.mail.mud.yahoo.com via HTTP; Thu, 08 Sep 2005 12:40:20 PDT Date: Thu, 8 Sep 2005 12:40:20 -0700 (PDT) From: erkan kolemen To: freebsd-hackers@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit Subject: fok() execve() -> No child processes X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 08 Sep 2005 19:40:21 -0000 Following code fails. I debugged it and saw that: it produces "No child processes" error while wait(). is it possible, parent still is not start to wait but child finished. After that CPU schedules parents. It try to start wait but child has finished. is it possible... What can i do for that? static int e_x_e_c(char *cmd[]) { pid_t pid; int stat; switch((pid = vfork())) { case -1: syslog(LOG_ERR, "fork: %s", strerror(errno)); return -16; break; case 0: if(execve(cmd[0], cmd, NULL) == -1) { syslog(LOG_ERR, "execve: %s", strerror(errno)); return -15; } break; default: if (wait(&stat) == -1) { slog(1, LOG_ERR); return -14; } if (WIFSIGNALED(stat)) { syslog(LOG_NOTICE, "%s is signalled", cmdline[0]); return -13; } if (WIFSTOPPED(stat)) { syslog(LOG_NOTICE, "%s is stopped", cmdline[0]); return -12; } if (WIFEXITED(stat)) return WEXITSTATUS(stat); break; } return -11; } ______________________________________________________ Click here to donate to the Hurricane Katrina relief effort. http://store.yahoo.com/redcross-donate3/