Что делает pthread несуществующим? - PullRequest
2 голосов
/ 25 сентября 2008

Я работаю с многопоточной программой (использующей pthreads), которая в настоящее время создает фоновый поток (PTHREAD_DETACHED), а затем вызывает pthread_exit (0). Моя проблема заключается в том, что этот процесс заносится в список «несуществующий» и, как ни странно, кажется, что он «действительно не существует» в / proc (что побеждает мои стратегии отладки)

Я бы хотел, чтобы были выполнены следующие требования:

  • программа должна запускать функцию A в цикле и функцию B один раз
  • учитывая, что PID программы / proc / $ pid / exe, / proc / $ pid / maps и / proc / $ pid / fd должны быть доступны (когда процесс не функционирует, все они являются пустыми или недействительными ссылками)
  • должна быть возможность приостановить / прервать программу с помощью CTRL + C и CTRL + Z как обычно

edit: Я не решаюсь изменить интерфейс программы, чтобы иметь A в «главном» потоке и B в порожденном (в настоящее время они в другом направлении). Решит ли это проблему?

Ответы [ 3 ]

2 голосов
/ 08 ноября 2008

Вы можете либо приостановить выполнение основного процесса, ожидающего сигнала, либо не отсоединять поток (используя PHTREAD_CRATE_JOINABLE ) по умолчанию, ожидая его завершения с pthread_join().

1 голос
/ 25 сентября 2008

Есть ли причина, по которой вы не можете сделать что-то наоборот: основной поток запускает цикл и выполняет одноразовую задачу в фоновом потоке?

0 голосов
/ 25 сентября 2008

Не самый элегантный дизайн, но, возможно, вы можете заблокировать основной поток перед выходом:

 while(1) {
       pause();
 }

Затем вы можете установить обработчик сигнала для SIGINT и SIGTERM, который прерывает цикл. Самый простой способ для этого: выход (0): -).

...