Problema de tiempo de espera del sistema Linux popen
Defina una variable global como un bit de bandera
Bifurcación, deje que el subproceso ejecute la llamada al sistema. ..
Luego el proceso padre llama al despertador y establece el período en 20 segundos, de modo que se recibirá un SIGALRM cada 20 segundos;
Luego registra la señal SIGALRM y SIGCHILD funciones de procesamiento, y luego puede dejar que una de las funciones de procesamiento de señales modifique la variable global... (Cuando el proceso hijo regrese, el proceso padre recibirá una señal SIGCHILD)
Luego, llame a sigsuspend para poner el proceso principal en estado de suspensión y configure máscaras de señal para garantizar que estas dos señales puedan despertar el proceso principal: SIGALRM y SIGCHILD. En este punto, debe determinar cómo se despertó el proceso principal (usando la variable global hace un momento)... si es SIGALRM, es un tiempo de espera. Si es SIGCHILD, no hay tiempo de espera... el resto depende de usted. Tienes que manejar cada caso por separado...
Por supuesto, otra forma más sencilla (también requiere más CPU)...aún necesitas un proceso hijo...
Bifurcación primero , luego llame a waitpid, configúrelo para que regrese inmediatamente para que pueda determinar inmediatamente el estado del proceso hijo, luego, si el tiempo no excede sus requisitos, continúe waitpid hasta que el tiempo exceda los 20 segundos o el proceso hijo esté antes del límite de tiempo hasta regresando... Este tipo de sondeo es obviamente un gran desperdicio de CPU... (Cómo juzgar si waitpid se puede ejecutar manualmente)
Otros métodos... No puedo pensar en eso... .