Red de conocimiento informático - Espacio del host - El proceso de planificación de China

El proceso de planificación de China

Después de bifurcar, es mejor distinguir los dos procesos de esta manera; de lo contrario, es muy fácil causar problemas.

PID = fork();

If (pid==0)

{

Procesamiento de subproceso....

}

else if(PID & gt; 0)

{

Procesamiento del proceso principal....

}

Otros

Manejo de errores de bifurcación

Después de cambiar su programa al formulario anterior,

Eliminación completa, verifique el valor de retorno de matar, sin error. Cambié una señal, SIGUSR1, y registré una función de procesamiento de señal simple para ella, y el problema se resolvió.

No sé cuál es la función de procesamiento de señales predeterminada de SIGCONT, pero enviar SIGCONT no permite que el proceso hijo regrese a menos que se registre manualmente una función de procesamiento de señales.

Pruébalo. .

Acabo de modificar el programa, parece que el ejecutivo no responde en el subproceso, pero tiene razón:

# include & ltsys/types

#. incluir & ltunistd .h & gt

# incluir & ltfcntl.h & gt

# incluir & ltstdio.h & gt

# incluir & ltsys/wait . h & gt;

# incluir & ltstdlib.h & gt

# incluir & ltsignal.h & gt

void taskighandler(int signal num);

void inicialization()

{

Señal (SIGUSR1, taskighhandler);

printf("La tarea está lista...\ n ") ;

printf("Tarea pid= %d\n ",getpid());

pause(); //La subrutina se bloquea

printf("Reinicio de tarea...\ n ");

int a = 0

for(a = 0; a & lt10;a++)

{

printf("la tarea es diong...\ n ");

Dormir(1);

}

execl("/bin/ls", "ls", NULL);

perror(" execl");

}

void taskighhandler( int signal num)

{

printf("OK, capturar señal\ n ");

}

int main()

{

int I;

PID_t PID = 0;

PID = fork();

Si ( pid == 0) /*El proceso hijo ejecuta el comando*/

{

Señal (SIGUSR1, taskighandler);

printf(" La tarea es listo...\n ");

//printf("pid de la tarea= %d\n ", getpid());

pause();/ /La subrutina se bloquea

printf("La tarea se reinicia...\ n ");

int a = 0

for(a = 0; a & lt5; a++; )

{

printf("la tarea es diong...\ n ");

dormir(1);

}

}

else if(PID & gt; 0)

{

printf("pid es %d\n ", PID);

Sleep (5);

int retCode=kill(pid, SIG usr 1); //El proceso padre envía una señal al proceso hijo, requiriendo al hijo. proceso para continuar ejecutándose.

if(retCode & lt; 0)

{

error("Error de señal al enviar");

}

Dormir(8);

Devolver 0;

}

Otros

{

perror("Error de bifurcación\n ");

Salir (-1);

}

}

Aquí hay algunos aspectos relacionados Después de la explicación de SIGCONT, parece que la situación que usó aquí no es apropiada:

En plataformas compatibles con POSIX, SIGCONT es una señal enviada desde la señal SIGSTOP de detención anterior para reiniciar el programa de computadora. En el nombre de la señal simbólica definido en el archivo de encabezado signal.h, la constante simbólica es SIGCONT porque los números de señal pueden cruzar plataformas y cambiar de uso.

Usar

Cuando SIGSTOP se envía a un proceso en su estado actual, el comportamiento habitual es permanecer en ese proceso. El proceso solo continuará si le envías una señal SIGCONT. SIGSTOP y SIGCONT se utilizan para el control de trabajos en programas shell de UNIX y para otros fines.