fork()的异步信号安全性

Eya*_*hem 6 c linux fork solaris glibc

根据Oracle的多线程编程指南,fork()在信号处理程序内部应该是安全的.但是我的进程被卡在信号处理程序中,跟随回溯:

 #0  __lll_lock_wait_private () at   ../nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S:95
 #1  0x00007f86e6a9990d in _L_lock_48 () from /lib/x86_64-linux- gnu/libc.so.6
 #2  0x00007f86e6a922ec in ptmalloc_lock_all () at arena.c:242
 #3  0x00007f86e6ad5e82 in __libc_fork () at ./nptl/sysdeps/unix/sysv/linux/x86_64/../fork.c:95
 #4  0x00007f86e7d9f125 in __fork () at ./nptl/sysdeps/unix/sysv/linux/pt-fork.c:25
....
 #7  signal handler called
Run Code Online (Sandbox Code Playgroud)

那么malloc在信号处理程序中使用是不安全的fork呢?

提前致谢.

And*_*nle 3

现在,这被 RedHat 列为错误

Bug 1422161 - glibc:fork 不是异步信号安全的

...

+++ 该 bug 最初是作为 Bug #1422159 的克隆创建的 +++

POSIX 要求 fork 是异步信号安全的。我们目前的实施不是。