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.