Программа на C++ занимает слишком много времени при основном возврате (ошибка sv) ⇐ Linux
-
Гость
Программа на C++ занимает слишком много времени при основном возврате (ошибка sv)
У меня есть программа на C++, которую я использую в качестве службы: я запускаю ее с помощью «sv start program» и останавливаю с помощью «sv stop program» — к сожалению, иногда я не могу ее правильно остановить:
-bash-4.2# strace -tfp $(pidof program) 2> log -bash-4.2# остановить программу sv тайм-аут: запуск: программа: (pid 1234) 15666 с, хочу отключиться, получил TERM -bash-4.2# хвост /корень/журнал 12:06:20 закрыть(3) = 0 12:06:20 sendto(4, "X\0\0\0\4", 5, MSG_NOSIGNAL, NULL, 0) = 5 12:06:20 закрыть(4) = 0 12:06:20 закрыть(5) = 0 12:06:20 munmap(0x7f832b7ff000, 8392704) = 0 12:06:20 munmap(0x7f8346a88000, 659456) = 0 12:06:20 open("/var/local/.exit", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 3 12:06:20 закрыть(3) = 0 12:06:28 выход_группа(0) = ? 12:06:28 +++ вышло с 0 +++ Насколько я знаю, 'sv stop' отправляет тайм-аут через 7 секунд, если процесс все еще не завершается, но процессу потребовалось 8 секунд, чтобы просто вернуть 0 (иногда требовалось больше) - я не знаю не знаю почему...
К сожалению, я не могу показать исходный код, так как это чужая интеллектуальная собственность, но могу указать на 3 вещи:
[*]Все огромные нестатические объекты освобождаются перед вызовом open("/var/local..." [*]Все параллельные потоки завершаются до вызова open("/var/local..." [*]Существует только один огромный статический вектор, который невозможно заменить.
Итак, в чем может быть возможная причина такой проблемы? Или как его отладить, если причина в разрушении статического вектора (например, как обнаружить вызов free())?
У меня есть программа на C++, которую я использую в качестве службы: я запускаю ее с помощью «sv start program» и останавливаю с помощью «sv stop program» — к сожалению, иногда я не могу ее правильно остановить:
-bash-4.2# strace -tfp $(pidof program) 2> log -bash-4.2# остановить программу sv тайм-аут: запуск: программа: (pid 1234) 15666 с, хочу отключиться, получил TERM -bash-4.2# хвост /корень/журнал 12:06:20 закрыть(3) = 0 12:06:20 sendto(4, "X\0\0\0\4", 5, MSG_NOSIGNAL, NULL, 0) = 5 12:06:20 закрыть(4) = 0 12:06:20 закрыть(5) = 0 12:06:20 munmap(0x7f832b7ff000, 8392704) = 0 12:06:20 munmap(0x7f8346a88000, 659456) = 0 12:06:20 open("/var/local/.exit", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 3 12:06:20 закрыть(3) = 0 12:06:28 выход_группа(0) = ? 12:06:28 +++ вышло с 0 +++ Насколько я знаю, 'sv stop' отправляет тайм-аут через 7 секунд, если процесс все еще не завершается, но процессу потребовалось 8 секунд, чтобы просто вернуть 0 (иногда требовалось больше) - я не знаю не знаю почему...
К сожалению, я не могу показать исходный код, так как это чужая интеллектуальная собственность, но могу указать на 3 вещи:
[*]Все огромные нестатические объекты освобождаются перед вызовом open("/var/local..." [*]Все параллельные потоки завершаются до вызова open("/var/local..." [*]Существует только один огромный статический вектор, который невозможно заменить.
Итак, в чем может быть возможная причина такой проблемы? Или как его отладить, если причина в разрушении статического вектора (например, как обнаружить вызов free())?
Мобильная версия