проверять потоки, работающие после выхода из программы - PullRequest
10 голосов
/ 30 августа 2010

gcc 4.4.3 c89 pthreads

Я использую valgrind для проверки ошибок памяти.

Мне просто интересно, есть ли какой-нибудь инструмент для linux, который может обнаруживать запущенные потоки, которые не были прекращены после завершения программы.

Я запускаю многопоточное приложение и мне нужен инструмент, чтобы убедиться, что все потоки завершены.

Большое спасибо за любые предложения,

Ответы [ 13 ]

0 голосов
/ 08 сентября 2010

Вы упускаете важную часть:

Программа не может завершиться, если не завершены все ее потоки .

Однако вы должны сделать pthread_join() во всех потоках перед выходом. Это гарантирует, что все потоки завершены, и позволит вам free() все их соответствующие pthread_t s, чтобы вы не вытекли из них памяти.

Сказав это, valgrind может дать вам полное представление о потоках, которые вы не очистили после. Запустите его с --leakcheck=full и убедитесь, что вы не оставляете позади себя различные структуры. Они покажут, что есть нить, которую вы не полностью прекратили.

0 голосов
/ 08 сентября 2010

Если вы хотите, чтобы внешние средства наблюдали за потоками в процессе вашего процесса, в Linux вы можете посмотреть в / proc / (pid) / task.Это метод, который используют инструменты типа ps (1) или top (1).

См. http://linux.die.net/man/5/proc

0 голосов
/ 30 августа 2010

Если это потоки (а не процессы), то вам просто нужно проверить, работает ли ваш процесс, так как потоки выполняются внутри процесса.

Вы можете проверить, запущен ли процесс с помощью ps -efпередайте результат в grep, чтобы найти ваш конкретный процесс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...