6 votos

Proceso fue asesinado - ¿por qué? ¿Cómo puedo averiguarlo?

He escrito un programa de ordenador en C++, compilado y corrió dentro de la terminal de la línea de comandos. Este programa se ejecuta bien, muchas veces, pero parece que cada vez que su acumulado de tiempo de CPU supera los 60 minutos (que se produce después de cerca de 9 minutos, ya que se ejecuta en ~700% en los ocho hilos) es matado por el sistema de tiempo de ejecución (al menos eso es sugerido por vigilancia en el uso de top).

No hay ningún error o un mensaje, sino que simplemente la palabra "Muerto" impreso en la línea de comandos:

MacBook-Pro-8:~/directory> ./program_name options
Killed

Hay un límite en el acumulado de tiempo de CPU para tales procesos? ¿Cómo puedo saber lo que mató a mi proceso? ¿Cómo puedo evitar esto?


Siguiendo la sugerencia para que se ejecute esta en un depurador, aquí está el resultado:

Process 90937 stopped
* thread #1, queue = 'com.apple.main-thread', stop reason = signal SIGKILL
frame #0: 0x000000010001fc50 captureISO`tbb::interface9::internal::start_for<WDutils::Parallel::details::blocked_range_terminating<unsigned long>, (anonymous namespace)::simulations::sampleSome(bool)::$_2, tbb::auto_partitioner const>::run_body(WDutils::Parallel::details::blocked_range_terminating<unsigned long>&) [inlined] tbb::concurrent_vector<(anonymous namespace)::simulations::initialCondition, tbb::cache_aligned_allocator<(anonymous namespace)::simulations::initialCondition> >::push_back(this=0x00007fff5fbfebd0)::simulations::initialCondition const&) at concurrent_vector.h:846 [opt]
   843      iterator push_back( const_reference item )
   844      {
   845          push_back_helper prolog(*this);
-> 846          new(prolog.internal_push_back_result()) T(item);
   847          return prolog.return_iterator_and_dismiss();
   848      }
   849  

Por lo tanto, el error se produjo en tbb_concurrent_vector.h en una llamada a la colocación de la new, lo que sugiere una falta de memoria. Aunque todavía estoy desconcertado por qué esto debería resultar en una interrupción de la señal. Pero parece que esta fuera de tema aquí. Me han preguntado sobre Stack Overflow.

5voto

Jose Chavez Puntos 645

En general, no hay ningún límite en el acumulado de tiempo de CPU de los procesos en macOS.

Parece probable que su programa se detuvo debido a problemas tales como errores en el programa, la falta de memoria, o similar. Con el fin de averiguar lo que pasó, pruebe a iniciar el programa en el depurador y mirar a la traza.

Además se debe reemplazar el manejador de señales en el programa con una, que muestra que la señal que recibe. Usted podría también cambiar el programa de no matar a sí mismo cuando se recibe la señal, pero en lugar de hacer algo, como por ejemplo la liberación de memoria. Depende de la señal que se está recibiendo en si es o no puede ser ignorado.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X