Хотя это ошибка в glibc, это не должно произойти, кроме случаев, когда вы вызываете fork
из контекста асинхронного сигнала, где он прервал код, который уже содержит блокировку malloc
, и прерванный код не может двигаться вперед В противном случае это другой поток, удерживающий блокировку, и этот поток должен в конечном итоге выполнить продвижение вперед и позволить fork
продолжить.
Возможно, вы звоните popen
из обработчика сигнала? Если это так, это недопустимое использование, и вы должны ожидать, что оно может дать сбой многими другими способами, а не только этим.