gcc 4.4.3 c89 pthreads
Я использую valgrind для проверки ошибок памяти. [1280 Мне просто интересно, есть ли какой-нибудь инструмент для linux, который может обнаруживать запущенные потоки, которые не были прерваны после завершения программы.
Я запускаю многопоточное приложение и мне нужен инструмент, чтобы убедиться, что все потоки завершены ,
Большое спасибо за любые предложения,
Если программа завершилась (поскольку исходный поток вернулся из main()
, какой-то поток вызвал exit()
или процесс получил фатальный сигнал), то вы гарантируется, что все потоки были прекращены с крайним предубеждением.
Если вы хотите написать свою программу так, чтобы она гарантировала завершение работы всех своих потоков до выхода main()
, вам нужно перебрать все потоки в конце из main()
, вызывая pthread_join()
для каждого из них. (Это также означает, что вы не должны создавать свои потоки отсоединенными или отсоединять их).
Если вы планируете использовать библиотеку Boost.Threads, вы можете использовать метод .join()
.
#include <boost/thread/thread.hpp>
#include <iostream>
void hello()
{
std::cout <<
"Hello world, I'm a thread!"
<< std::endl;
}
int main(int argc, char* argv[])
{
boost::thread thrd(&hello);
thrd.join();
return 0;
}
Если это потоки (а не процессы), вам просто нужно проверить, работает ли ваш процесс, потому что потоки выполняются внутри процесса.
Вы можете проверить, запущен ли процесс с помощью ps -ef, а затем передать результат в grep, чтобы найти ваш конкретный процесс.
Поправьте меня, если я ошибаюсь, но программа не будет завершена, пока не закончатся все запущенные потоки.