Date: Thu, 8 Sep 2005 23:54:30 +0300 From: victor cruceru <victor.cruceru@gmail.com> To: erkan kolemen <erkankolemen@yahoo.com> Cc: freebsd-hackers@freebsd.org Subject: Re: fok() execve() -> No child processes Message-ID: <494025505090813545451dae6@mail.gmail.com> In-Reply-To: <20050908203521.84843.qmail@web33405.mail.mud.yahoo.com> References: <494025505090813027dc0d6d3@mail.gmail.com> <20050908203521.84843.qmail@web33405.mail.mud.yahoo.com>
next in thread | previous in thread | raw e-mail | index | archive | help
Well, I suppose that execve is successful. if not you should call _exit() instead of exit() in the child process (you should not return from e_x_e_c if the exec fails) Also your application should not ignore SIGCHLD. See man vfork and especially man wait.=20 victor cruceru On 9/8/05, erkan kolemen <erkankolemen@yahoo.com> wrote: > i tried and still same error. >=20 > thanks. >=20 > --- victor cruceru <victor.cruceru@gmail.com> wrote: >=20 > > Try to replace vfrork with fork and check if you'll > > get the same behavior. > > victor cruceru > > > > > > On 9/8/05, erkan kolemen <erkankolemen@yahoo.com> > > wrote: > > > 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 =3D vfork())) { > > > case -1: > > > syslog(LOG_ERR, "fork: %s", > > > strerror(errno)); > > > return -16; > > > break; > > > case 0: > > > if(execve(cmd[0], cmd, > > NULL) > > > =3D=3D -1) { > > > syslog(LOG_ERR, > > > "execve: %s", strerror(errno)); > > > return -15; > > > } > > > break; > > > default: > > > if (wait(&stat) =3D=3D -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/ > > > _______________________________________________ > > > freebsd-hackers@freebsd.org mailing list > > > > > > http://lists.freebsd.org/mailman/listinfo/freebsd-hackers > > > To unsubscribe, send any mail to > > "freebsd-hackers-unsubscribe@freebsd.org" > > > > > >=20 >=20 >=20 >=20 >=20 > ______________________________________________________ > Click here to donate to the Hurricane Katrina relief effort. > http://store.yahoo.com/redcross-donate3/ >
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?494025505090813545451dae6>