La Red de Conocimientos Pedagógicos - Currículum vitae - Problema de tiempo de espera del sistema Linux popen

Problema de tiempo de espera del sistema Linux popen

Un método es: señal + método de subproceso... parece más engorroso...

Definir una variable global como una bandera

fork, Let el proceso hijo ejecuta la llamada al sistema...

Luego el proceso padre llama a la alarma y establece el período en 20 segundos, de modo que se recibirá un SIGALRM cada 20 segundos;

Luego registrar SIGALRM Las dos funciones de procesamiento de señales SIGCHILD y SIGCHILD pueden permitir que una de las funciones de procesamiento de señales modifique la variable global. (El proceso padre recibirá una señal SIGCHILD cuando el proceso hijo regrese)

Luego, llame sigsuspend para dejar que el proceso principal duerma y la máscara de señal se configura para garantizar que dos señales puedan despertar el proceso principal: SIGALRM y SIGCHILD.

Entonces su proceso padre se despierta con una determinada señal... En este momento, determine cómo se despertó (use la variable global justo ahora)... Si es SIGALRM, significa un tiempo de espera. Si es SIGCHILD Significa que no hay tiempo de espera... El resto es asunto suyo. Maneje las dos situaciones por separado...

Por supuesto, otro método simple (que consume más CPU)... aún. requiere un proceso hijo...

Primero bifurque, luego llame a waitpid, configúrelo para regresar inmediatamente, de modo que el estado del proceso hijo pueda determinarse de inmediato, y luego, si el tiempo no excede sus requisitos, continúe esperando hasta que el tiempo exceda los 20 segundos o El proceso hijo regrese antes del límite de tiempo... Dicho sondeo es obviamente un desperdicio de CPU... (Cómo juzgar si puede

man

waitpid)

Otros métodos...a mí tampoco se me ocurren...