Autor
|
Tema: Confusion al utilizar execl en un fork() (Leído 6,224 veces)
|
z3k4
Desconectado
Mensajes: 8
|
Hola amigos, les cuento el siguiente problema: Al hacer un fork() como sabeis se crean dos procesos iguales y con el mismo nombre. Uno es el padre y otro el hijo. Pues bien lo que necesito hacer es que el hijo cambie el nombre de su proceso utilizando la funcion execl a la que le paso como parametros la direccion del ejecutable, el nuevo nombre que va a tener el proceso hijo y NULL porque no se necesita nada mas o eso creo. Me ocurre lo siguiente: Al hacer la llamada al sistema execl el sistema se olvida del programa y vuelve a empezar a ejecutarse desde el main y entonces se me queda en bucle infinito creando hijos con el nuevo nombre de forma que no para de reproducirse. xD. Tengo que evitar que al volver a ejecutarse desde el main vuelva a pasar por el mismo fork() pero llevo dias intentandolo y no soy capaz. Se que tengo que utilizar argv[0] para algo porque me lo aconsejo el profesor, pero no soy capaz de adivinarlo. Hechen me una mano por favor!! Muchas gracias.
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> #include <signal.h> #include <errno.h>
int main (int argc,char *argv[]) { if(strcmp(argv[0],"malo")==0)//ESTO SE QUE ESTA MAL! { switch(fork()) { case -1: perror("Error al crear al Malo\n"); exit(1); case 0: //SOY EL MALO fprintf(stdout,"Soy el Malo\n"); if(execl("./prueba1","malo",NULL)==-1) { perror("Error al cambiar el proceso de nombre\n"); exit(2); } pause(); break; default: //SOY CHARLIE fprintf(stdout,"Soy Charlie\n"); pause(); break; } } return 0; }
|
|
|
En línea
|
|
|
|
[L]ord [R]NA
Desconectado
Mensajes: 1.513
El Dictador y Verdugo de H-Sec
|
En argv[0] esta el nombre del ejecutable... por cierto solo existe una forma de que se cree un bucle infinito en tu programa... que el programa que llamas sea el mismo que ejecutaste.
|
|
|
En línea
|
|
|
|
z3k4
Desconectado
Mensajes: 8
|
No llamo al mismo programa que ejecute, se que argv[0] es en principio el nombre del ejecutable, pero cuando llamo a la funcion execl("ruta del ejecutable","nuevo nombre",NULL) al volver a entrar en el main argv[0] es igual a "nuevo nombre" no el nombre del principio. No paro de romperme la cabeza...
|
|
|
En línea
|
|
|
|
Akai
Desconectado
Mensajes: 823
|
Yo que tu me miraría la referencia de execl: int execl(const char *path, const char *arg, ...);
path es la dirección del ejecutable. argv[0] es el comando con el cual se ha lanzado el ejecutable, es decir, suponiendo que tu has lanzado el comando ./prueba1, argv[0] es ./prueba1. PERO tu problema en el execl, es que estás pasando la dirección del ejecutable como "./prueba1" cuando ele ejecutable NO se llama así, se llama "prueba1" o como se llame.
|
|
|
En línea
|
|
|
|
[L]ord [R]NA
Desconectado
Mensajes: 1.513
El Dictador y Verdugo de H-Sec
|
Prueba con esto #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> #include <signal.h> #include <errno.h> int main (int argc,char *argv[]) { if(strcmp(argv [1],"malo")==0)//Cambiar argv[0] por argv[1] { switch(fork()) { case -1: perror("Error al crear al Malo\n"); case 0: //SOY EL MALO if(execl("./prueba1","malo",NULL)==-1) { perror("Error al cambiar el proceso de nombre\n"); } pause(); break; default: //SOY CHARLIE pause(); break; } } return 0; }
|
|
|
En línea
|
|
|
|
z3k4
Desconectado
Mensajes: 8
|
Nada no consigo solucionar nada. Tal y como lo has puesto queda en bucle infinito que putada.
|
|
|
En línea
|
|
|
|
[L]ord [R]NA
Desconectado
Mensajes: 1.513
El Dictador y Verdugo de H-Sec
|
Ya vi el bucle... la linea 21 lo provoca. Si llamas con el parametro malo, siempre sera el malo. #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> #include <signal.h> #include <errno.h> int main (int argc,char *argv[]) { if(strcmp(argv [1],"malo")==0)//Cambiar argv[0] por argv[1] { switch(fork()) { case -1: perror("Error al crear al Malo\n"); case 0: //SOY EL MALO if(execl("./prueba1","malo",NULL)==-1) { perror("Error al cambiar el proceso de nombre\n"); } pause(); break; default: //SOY CHARLIE pause(); break; } } return 0; }
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Fork en php
PHP
|
WHK
|
0
|
3,685
|
8 Diciembre 2007, 09:26 am
por WHK
|
|
|
execl adapter
Java
|
sapito169
|
0
|
3,155
|
14 Agosto 2008, 10:07 am
por sapito169
|
|
|
Emular MultiHilos (multithread) Sin Fork (FAKE FORK)
« 1 2 »
PHP
|
OzX
|
14
|
9,512
|
27 Marzo 2009, 00:24 am
por OzX
|
|
|
hacer esto con fork esta bien?
Programación C/C++
|
Belial & Grimoire
|
5
|
4,181
|
28 Septiembre 2010, 16:26 pm
por [L]ord [R]NA
|
|
|
FORK en java
Java
|
reylagarto19
|
7
|
6,802
|
1 Agosto 2012, 20:47 pm
por egyware
|
|