🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: es.comp.os.linux.programacion
Article #7958

Re: problema con execvp()

#7958
From: Fernando Arbeiza
Date: Wed, 22 Jan 2003 23:44
78 lines
3382 bytes
Hola:

A ver si te puedo aclarar algo. Vamos all� ;-)

On Thu, 23 Jan 2003 01:05:57 +0100, Antonio <aperlu@obelix.umh.es>
wrote:
> Hola a todos, el tema es que estoy intentando ejecutar comandos en
> backgraund empleando la siguiente estructura:
>         fork(); execvp(argv[argc],argv);
> El problema es que no me aclaro para definir los argumentos, es decir
> no se donde o como incluir el caractar & para que se lanze en
> backgraund.

Para conseguir que un comando se ejecuta en background, no tienes que
especificar el '&' en el comando que lances. El "truco" est� en hacer
algo como esto:

/****************/
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>

int main(void) {
    pid_t   pid;

    pid = fork();
    if (pid < 0) {
        perror("fork");
        exit(EXIT_FAILURE);
    }

    if (pid != 0) {
        printf("%s\n", "El padre ha terminado");
        exit(EXIT_SUCCESS);
    }

    /* Esto se ejecutar� en background */
    sleep(5);
    printf("%s\n", "El hijo ha terminado");
    exit(EXIT_SUCCESS);
}
/****************/

De esta forma, el padre sale en seguida, y es el hijo el que se encarga
de ejecutar los comandos (en tu caso, el execvp), pero estando ya en
background. Ejec�talo el ejemplo y ver�s.

> Tambien me gustaria saber si es posible lanzar un proceso en backgraund 
> empleando para ello algun tipo de se�al o no.

_Que yo sepa_, los procesos no pasan a background al recibir una se�al.
Seg�n signal(7), esto es lo que puede pasar cuando un proceso recibe una
se�al:

    A   La acci�n por omisi�n es terminar el proceso.
    B   La acci�n por omisi�n es no hacer caso de la se�al.
    C   La acci�n por omisi�n  es  terminar  el proceso  y hacer un
        volcado de memoria.
    D   La acci�n por omisi�n es parar el proceso.
    E   La se�al no puede ser capturada.
    F   La se�al no puede ser pasada por alto.

Podr�as hacer un manejador de se�al que, al recibirla, pasase el proceso
a background mediante un fork, pero ahora mismo no veo ninguna utilidad.

Por cierto, una direcci�n que puede ser de utilidad (eso s�, en ingl�s):

    <URL: http://stommel.tamu.edu/~baum/programming.html>

> Muchas gracias por vuestra ayuda
> Un saludo.

Espero que te haya servido.
Un saludo :-)

-- 
Fernando Arbeiza        <URL: mailto:arbeizaf@ono.com>
Crea tu propio Linux:   <URL: http://www.escomposlinux.org/lfs-es>
Technical Details
Message-ID: <slrnb2ub7g.3br.arbeizaf@jupiter.olimpo>
Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!newsfeed.stanford.edu!headwall.stanford.edu!fu-berlin.de!uni-berlin.de!81-203-248-51.user.ono.COM!not-for-mail
References: <b0n8fh$h53$2@lamanonegra.eg>

Show Full Headers
Complete Article Headers
X-Google-Language: SPANISH,ASCII
X-Google-Thread: f86c8,89fc5ef4e0b3d525
X-Google-Attributes: gidf86c8,public
X-Google-ArrivalTime: 2003-01-22 15:53:49 PST
Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!newsfeed.stanford.edu!headwall.stanford.edu!fu-berlin.de!uni-berlin.de!81-203-248-51.user.ono.COM!not-for-mail
From: Fernando Arbeiza <arbeizaf@ono.com>
Newsgroups: es.comp.os.linux.programacion
Subject: Re: problema con execvp()
Date: Thu, 23 Jan 2003 00:44:48 +0100
Lines: 78
Message-ID: <slrnb2ub7g.3br.arbeizaf@jupiter.olimpo>
References: <b0n8fh$h53$2@lamanonegra.eg>
NNTP-Posting-Host: 81-203-248-51.user.ono.com (81.203.248.51)
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-15
Content-Transfer-Encoding: 8bit
X-Trace: fu-berlin.de 1043279628 26993697 81.203.248.51 (16 [148301])
X-Orig-Path: jupiter.olimpo!news
User-Agent: slrn/0.9.7.4 (Linux)