Вопрос

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

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

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

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

Это было полезно?

Решение

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

Другие советы

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

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

 while(1) {
       pause();
 }

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top