Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: DrKillador en 2 Julio 2013, 20:20 pm



Título: Crear proceso en C con Codeblocks que no muera al matar al proceso padre
Publicado por: DrKillador en 2 Julio 2013, 20:20 pm
Hola foreros!

Estoy practicando la creacion de hebras y procesos en C, con Codeblocks en Windows. De momento he hecho una aplicacion que abre la calculadora desde una hebra. Funciona perfecta.

Código
  1. //exec es una funcion que ejecutará el programa pasado como argumento, en las pruebas estoy utilizando calc.exe
  2. DWORD WINAPI b(LPVOID lpParam)
  3. {
  4.    exec(lpParam);
  5.    return 0;
  6. }
  7.  
  8. void a(char *lpParam)
  9. {
  10.    int dth1;
  11.    HANDLE hth1;
  12.  
  13.    hth1=CreateThread(NULL, 0, b(lpParam), &dth1, 0, NULL);
  14.    if(hth1==NULL)
  15.        ExitProcess(dth1);
  16. }

Mi duda ahora es la siguiente, cuando cierro la aplicacion se me cierra tambien la calculadora. Entiendo que es el comportamiento correcto, porque una hebra no deja de ser un hilo que depende del proceso padre. ¿Pero como deberia abrir la calculadora para que cuando muera el padre no muera el hijo? ¿No me valdria con crear una hebra no? ¿Deberia ser un proceso con CreateProcess?

Graxxxxx


Título: Re: Crear proceso en C con Codeblocks que no muera al matar al proceso padre
Publicado por: amchacon en 2 Julio 2013, 21:10 pm
Exacto, tendría que ser un proceso nuevo  ;)

Los hilos (hebras) dependen del proceso padre.


Título: Re: Crear proceso en C con Codeblocks que no muera al matar al proceso padre
Publicado por: DrKillador en 3 Julio 2013, 17:34 pm
Entiendo la teoría, pero a la hora de implementarlo tengo una duda existencial.

Con CreateThread yo podia pasarle como argumento una función que quería que me ejecutase "en paralelo" (en el caso anterior: b(lpParam)).

Pero con CreateProcess, solo puedo pasarle como argumento un exe, es decir, un programa ¿no?

Código
  1. CreateProcess(0,argument,0,0,TRUE,0,NULL,NULL,&si,&pi);

Graxxx men


Título: Re: Crear proceso en C con Codeblocks que no muera al matar al proceso padre
Publicado por: amchacon en 3 Julio 2013, 17:47 pm
CreateProcess lanza un nuevo programa desde cero, el nombre se indica en el primer campo y los argumentos en el segundo campo.

Los exe pueden recibir argumentos, no sé si has visto una declaración main de este estilo:

Código
  1. int main(int argc,char** argv)

argc es el número de argumentos y argv son los distintos argumentos  ;)


Título: Re: Crear proceso en C con Codeblocks que no muera al matar al proceso padre
Publicado por: aguml en 15 Julio 2013, 12:07 pm
¿Habeis probado con esto?
http://www.cplusplus.com/reference/thread/thread/detach/


Título: Re: Crear proceso en C con Codeblocks que no muera al matar al proceso padre
Publicado por: amchacon en 15 Julio 2013, 12:55 pm
Detach no sirve para eso  :silbar:

Cuando finaliza el programa, se cierra igualmente.


Título: Re: Crear proceso en C con Codeblocks que no muera al matar al proceso padre
Publicado por: DrKillador en 15 Julio 2013, 13:39 pm
Gracias men, entonces no me queda otra que pasar el código de la funcion que queria ejecutar en un nuevo proceso a un nuevo exe, para poder lanzarlo de manera independiente

saludosss