Article View: es.comp.os.linux.programacion
Article #5889Re: Llamada wait
From: Fernando Arbeiza
Date: Fri, 29 Aug 2003 07:10
Date: Fri, 29 Aug 2003 07:10
82 lines
3380 bytes
3380 bytes
On Fri, 29 Aug 2003 07:52:50 +0200, Fernando Arbeiza <arbeizaf@ono.com> wrote:
>> S�, esa es una buena soluci�n, pero... �y los hijos que no son hijos
>> directos (hijos de los hijos y etc)?.
>
> Creo que se puede hacer as�:
>
> � Llamar a setsid() desde el padre para convertirse en el l�der del
> grupo de procesos.
> � Llamar a waitpid() con el propio pid negatido; es decir, desde el
> padre, llamar algo equivalente a:
> waitpid(-getpid(), &status, 0);
Lo que te dije no est� bien. Te dar� un error de permisos. Tienes que
hacer primero un fork(), ya que el proceso padre original no puede
llamar a setsid(), pero un hijo suyo s�. Te pongo un ejemplo; y espero
que te quede claro con �l:
/***********
* prueba.c *
***********/
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
int main(void) {
pid_t pid;
unsigned int i;
pid = fork();
if (pid < 0) {
perror("Error en fork");
exit(EXIT_FAILURE);
} else if (pid > 0) {
puts("Salgo del primer proceso");
exit(EXIT_SUCCESS);
}
if (setsid() < 0) {
perror("Error en setsid");
exit(EXIT_FAILURE);
}
pid = fork();
if (pid < 0) {
perror("Error en fork");
exit(EXIT_FAILURE);
} else if (pid > 0) {
while (waitpid(-getpid(), NULL, 0) > 0) { ; }
if (errno == ECHILD) {
puts("Se acab� la descendencia");
} else {
perror("Error en waitpid");
exit(EXIT_FAILURE);
}
} else {
for (i = 0; i <= 2; i++) {
pid = fork();
if (pid < 0) {
perror("Error en fork");
exit(EXIT_FAILURE);
}
}
sleep(5);
puts("Sale un descendiente");
}
exit(EXIT_SUCCESS);
}
/* Fin de Fichero */
Un poco lioso, pero funciona.
Un saludo.
--
Fernando Arbeiza <URL: mailto:arbeizaf@ono.com>
Crea tu propio Linux: <URL: http://www.escomposlinux.org/lfs-es>
Technical Details
Message-ID:
<slrnbktv3g.4sd.arbeizaf@jupiter.olimpo.homelinux.org>Path:
arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!newsfeed.stanford.edu!news-spur1.maxwell.syr.edu!news.maxwell.syr.edu!newsfeed.icl.net!newsfeed.fjserv.net!newsfeed00.sul.t-online.de!t-online.de!newsfeed.freenet.de!fu-berlin.de!uni-berlin.de!81-203-248-186.user.ono.COM!not-for-mailReferences:
<biim35$9fj1a$2@ID-97854.news.uni-berlin.de> <pan.2003.08.28.21.57.43.205314@eresmas.com> <bim5md$b4sjc$1@ID-97854.news.uni-berlin.de> <slrnbktqhi.pb.arbeizaf@jupiter.olimpo.homelinux.org>Show Full Headers
Complete Article Headers
X-Google-Language: SPANISH,ASCII X-Google-Thread: f86c8,9e2a4d206494c726 X-Google-Attributes: gidf86c8,public X-Google-ArrivalTime: 2003-08-29 08:12:32 PST Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!newsfeed.stanford.edu!news-spur1.maxwell.syr.edu!news.maxwell.syr.edu!newsfeed.icl.net!newsfeed.fjserv.net!newsfeed00.sul.t-online.de!t-online.de!newsfeed.freenet.de!fu-berlin.de!uni-berlin.de!81-203-248-186.user.ono.COM!not-for-mail From: Fernando Arbeiza <arbeizaf@ono.com> Newsgroups: es.comp.os.linux.programacion Subject: Re: Llamada wait Date: Fri, 29 Aug 2003 09:10:40 +0200 Lines: 82 Message-ID: <slrnbktv3g.4sd.arbeizaf@jupiter.olimpo.homelinux.org> References: <biim35$9fj1a$2@ID-97854.news.uni-berlin.de> <pan.2003.08.28.21.57.43.205314@eresmas.com> <bim5md$b4sjc$1@ID-97854.news.uni-berlin.de> <slrnbktqhi.pb.arbeizaf@jupiter.olimpo.homelinux.org> NNTP-Posting-Host: 81-203-248-186.user.ono.com (81.203.248.186) Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-15 Content-Transfer-Encoding: 8bit X-Trace: news.uni-berlin.de 1062169951 12216317 81.203.248.186 (16 [148301]) X-Orig-Path: jupiter.olimpo.homelinux.org!news User-Agent: slrn/0.9.7.4 (Linux)