elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ayuda con fork() y señales SIGUSR1
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda con fork() y señales SIGUSR1  (Leído 2,539 veces)
murrayxaiyan

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Ayuda con fork() y señales SIGUSR1
« en: 3 Mayo 2017, 04:10 am »

Hola me gustaria que me hechen una mano necesito crear un programa que a traves de una señal SIGUSR1 que se manda desde otra consola, en la consola original mostrar la hora, el problema que tengo es que me exijen que muestre el pid cambie pero me muestra siempre el mismo. Adjunto el codigo limpio para ver si me pueden ayudar con el tema de poner el fork() ya que cuando intento ponerlo se me pega en el mismo proceso y la idea es que el programa este siempre en espera de la señal SIGUSR1(por eso el while(1)).


Código
  1. #include<stdio.h>
  2. #include<signal.h>
  3. #include<unistd.h>
  4. #include<time.h>
  5.  
  6.  
  7.  
  8.  
  9. void sig_handler(int signo)
  10. {
  11. time_t rawtime;
  12. time (&rawtime);
  13.        printf("Hora actual es: %s", ctime (&rawtime));
  14. printf("Listo para recibir la señal SIGUSR1.\n");
  15.  
  16. }
  17.  
  18. void main()
  19. {
  20.  
  21. pid_t pid;
  22. pid=getpid();
  23. printf("Programa hora ejecutandose. PID=%d.\n", pid);
  24. printf("Listo para recibir la señal SIGUSR1.\n");
  25. signal(SIGUSR1, sig_handler);
  26. while(1);
  27.  
  28. }
  29.  


« Última modificación: 3 Mayo 2017, 07:13 am por engel lex » En línea

CalgaryCorpus


Desconectado Desconectado

Mensajes: 323


Ver Perfil WWW
Re: Ayuda con fork() y señales SIGUSR1
« Respuesta #1 en: 3 Mayo 2017, 07:10 am »

Invoca sleep al interior del while. Un while asi construido consumira toda la CPU.


En línea

Aqui mi perfil en LinkedIn, invitame un cafe aqui
MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Ayuda con fork() y señales SIGUSR1
« Respuesta #2 en: 3 Mayo 2017, 23:32 pm »

Prueba con esto. Aviso que uso Linux Mint Mate 18.1 y no lleva xterm por defecto (y ahora me da un poco de pereza instalarlo), así que no sé que tal ira.

Código
  1. #define _XOPEN_SOURCE
  2.  
  3. #include <stdio.h>
  4. #include <sys/types.h>
  5. #include <sys/wait.h>
  6. #include <signal.h>
  7. #include <unistd.h>
  8. #include <time.h>
  9. #include <fcntl.h>
  10. #include <stdlib.h>
  11. #include <string.h>
  12.  
  13. void sig_handler(int signo)
  14. {
  15.    time_t rawtime;
  16.  
  17.    time(&rawtime);
  18.    printf("PADRE.SIG_HANDLER: Hora actual es: %s", ctime (&rawtime));
  19. }
  20.  
  21. void hilo_hijo() {
  22.    pid_t ppid;
  23.    pid_t pid;
  24.    int terminal;
  25.    char argumentos[255] = "-S";
  26.  
  27.    terminal = open("dev/ptmx", O_RDWR | O_NOCTTY);
  28.    grantpt(terminal);
  29.    unlockpt(terminal);
  30.    dup2(0, terminal);
  31.    dup2(1, terminal);
  32.    dup2(2, terminal);
  33.    strcat(argumentos, ptsname(terminal));
  34.    pid = fork();
  35.    if(pid == 0) {
  36.        execl("xterm", argumentos);
  37.        exit(0);
  38.    }
  39.  
  40.    ppid = getppid();
  41.    printf("HIJO: Mi padre PID=%d.\n", ppid);
  42.    printf("HIJO: Voy a enviar un mensaje a mi padre...\n");
  43.    kill(ppid, SIGUSR1);
  44.    printf("HIJO: Hora de terminar.\n");
  45. }
  46.  
  47. void hilo_padre(pid_t pid_hijo) {
  48.    printf("PADRE: Programa hora ejecutandose. Mi hijo PID=%d.\n", pid_hijo);
  49. printf("PADRE: Listo para recibir la señal SIGUSR1.\n");
  50. signal(SIGUSR1, sig_handler);
  51. wait(NULL);
  52.    printf("PADRE: Hora de terminar.\n");
  53. }
  54.  
  55. int main() {
  56. pid_t pid;
  57.  
  58. pid = fork();
  59.  
  60.    switch(pid) {
  61.        case -1:
  62.            printf("ERROR: No se pudo generar el hilo\n");
  63.            break;
  64.  
  65.        case 0:
  66.            hilo_hijo();
  67.            break;
  68.  
  69.        default:
  70.            hilo_padre(pid);
  71.            break;
  72.    }
  73.    fflush(stdout);
  74. }
« Última modificación: 4 Mayo 2017, 09:37 am por MAFUS » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Fork en php
PHP
WHK 0 3,516 Último mensaje 8 Diciembre 2007, 09:26 am
por WHK
Emular MultiHilos (multithread) Sin Fork (FAKE FORK) « 1 2 »
PHP
OzX 14 8,953 Último mensaje 27 Marzo 2009, 00:24 am
por OzX
Señales, fork se detiene para luego seguir su ejecucion con una señal.
Programación C/C++
rul3s 0 1,584 Último mensaje 19 Octubre 2013, 16:01 pm
por rul3s
Ayuda creando Shell con execvp y fork
Programación C/C++
erovira 3 2,616 Último mensaje 24 Octubre 2015, 11:32 am
por erovira
Ayuda mover servomotor con python y Arduino por medio de señales emg
Programación General
Walter872 9 5,267 Último mensaje 18 Abril 2019, 18:53 pm
por rub'n
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines