¿Hay alguna manera de esperar la terminación de un subproceso, pero aún así interceptar las señales?Unión de subprocesos interrumpibles en Python
Considere el siguiente programa C:
#include <signal.h>
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <pthread.h>
#include <stdlib.h>
void* server_thread(void* dummy) {
sleep(10);
printf("Served\n");
return NULL;
}
void* kill_thread(void* dummy) {
sleep(1); // Let the main thread join
printf("Killing\n");
kill(getpid(), SIGUSR1);
return NULL;
}
void handler(int signum) {
printf("Handling %d\n", signum);
exit(42);
}
int main() {
pthread_t servth;
pthread_t killth;
signal(SIGUSR1, handler);
pthread_create(&servth, NULL, server_thread, NULL);
pthread_create(&killth, NULL, kill_thread, NULL);
pthread_join(servth, NULL);
printf("Main thread finished\n");
return 0;
}
Se termina después de un segundo y grabados:
Killing
Handling 10
Por el contrario, aquí está mi intento de escribir en Python:
#!/usr/bin/env python
import signal, time, threading, os, sys
def handler(signum, frame):
print("Handling " + str(signum) + ", frame:" + str(frame))
exit(42)
signal.signal(signal.SIGUSR1, handler)
def server_thread():
time.sleep(10)
print("Served")
servth = threading.Thread(target=server_thread)
servth.start()
def kill_thread():
time.sleep(1) # Let the main thread join
print("Killing")
os.kill(os.getpid(), signal.SIGUSR1)
killth = threading.Thread(target=kill_thread)
killth.start()
servth.join()
print("Main thread finished")
Imprime:
Killing
Served
Handling 10, frame:<frame object at 0x12649c0>
¿Cómo hacer que se comporte como la versión de C?
'gcc -pthread thread.c' es la forma de compilar código fuente en C si alguien se enfrentó a errores como yo probando 'gcc thread.c' solo. – ViFI