Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

399
Visualizações
mata los subprocesos por señal, pero la posición afecta?

Utilizo la función de señal para eliminar todos los subprocesos en el programa de procesos múltiples, el código se muestra soplado, guárdelo como un archivo llamado mul_process.py:

 import time import os import signal from multiprocessing import Process processes = [] def fun(x): print 'current sub-process pid is %s' % os.getpid() while True: print 'args is %s' % x time.sleep(100) def term(sig_num, frame): print 'terminate process %d' % os.getpid() for p in processes: print p.pid try: for p in processes: print 'process %d terminate' % p.pid p.terminate() p.join() except Exception as e: print str(e) if __name__ == '__main__': print 'current main-process pid is %s' % os.getpid() for i in range(3): t = Process(target=fun, args=(str(i),)) t.start() processes.append(t) signal.signal(signal.SIGTERM, term) try: for p in processes: p.join() except Exception as e: print str(e)

Usando 'python mul_process.py' para iniciar el programa en Ubuntu 10.04.4 y Python 2.6, cuando comienza a ejecutarse, en otra pestaña, uso kill -15 con el pid del proceso principal para enviar la señal SIGTERM para eliminar todos los procesos, cuando el el proceso principal recibe la señal SIGTERM, sale después de terminar todos los subprocesos, pero cuando uso kill -15 con el pid del subproceso, no funciona, el programa sigue vivo y ejecutándose como antes, y no imprime la oración definida en el término de la función, parece que el subproceso no recibe el SIGTERM. Como sé, el subproceso heredará el controlador de señal, pero no funciona, aquí está la primera pregunta.

Y luego muevo la línea 'signal.signal(signal.SIGTERM, term)' a la posición después de la línea 'if name == ' main ':', así:

 if __name__ == '__main__': signal.signal(signal.SIGTERM, term) print 'current main-process pid is %s' % os.getpid() for i in range(3): t = Process(target=fun, args=(str(i),)) t.start() processes.append(t) try: for p in processes: p.join() except Exception as e: print str(e)

Inicie el programa y use kill -15 con el pid del proceso principal para enviar la señal SIGTERM, el programa recibe la señal y llama al término de función, pero tampoco elimina ningún subprocesado y sale por sí mismo, esta es la segunda pregunta.

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Pocos problemas en su programa: acepte que el subproceso heredará el controlador de señal en su segundo fragmento de código, pero la lista de "procesos" de variables globales no se compartirá. Por lo tanto, la lista de procesos estaría disponible solo con el proceso principal. "proceso" sería una lista vacía para otro subproceso. Puede usar un tipo de mecanismo de cola o tubería para pasar la lista de procesos a los subprocesos. Pero traerá otro problema.

Usted termina el proceso1 y el controlador del proceso1 intenta terminar el proceso2 en el proceso4.

Ahora el proceso 2 también tiene el mismo controlador,

So Process 2 handler again try to terminate all other process

lo que empujará su programa a un bucle infinito.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda