У меня есть однопоточный процесс unix, который обменивается данными с tcp другими процессами.strace fixes hung process
Проблема заключается в следующем. Когда я запускаю процесс, он зависает (нет цикла занятости), пока я не убью его.
Самое смешное, что, как только я прикрепляю его с помощью strace, он продолжает работать с ожидаемым поведением, как будто проблем не было вообще. (всегда воспроизводимый)
В чем причина такого поведения? Какое влияние оказывает государство на процесс?
Обновление: Причина, по которой изменилось поведение strace, заключается в том, что мы использовали openonload с ошибкой. Как только мы привязали strace, стек был перенесен обратно в ядро, и проблема исчезла.
Если код имеет резьбу, условие горения может быть устранено с помощью процесса управления, который заставляет контекст изменяться в разных точках исполнения кода, чем происходит, когда код выполняется изначально. Запуск отладчика в многопоточном коде с проблемами иногда приводил к тому, что код не искал проблему - для меня. –
Правда, но ОП сказал «однопоточное» :) – loreb
У меня такая же ситуация ... зависающий процесс работает хорошо, если я привязываюсь к strace. Может ли кто-нибудь объяснить это объяснение? – ernesto