1 现象
服务器上发现有两个服务同时在跑,且子进程处理Sleep状态,查看sleep进程堆栈如下
#0 0x00007f47d6b8065c in __lll_lock_wait_private () from /lib64/libc.so.6
#1 0x00007f47d6b2acac in _L_lock_2546 () from /lib64/libc.so.6
#2 0x00007f47d6b2aae7 in __tz_convert () from /lib64/libc.so.6
.......
#10 <signal handler called>
#11 0x00007f47d6ae451e in _IO_proc_open@@GLIBC_2.2.5 () from /lib64/libc.so.6
#12 0x00007f47d6ae45dc in popen@@GLIBC_2.2.5 () from /lib64/libc.so.6
2 原因分析
1.popen会生成子进程
2.子进程打印日志调用localtime_r死锁
2.1 两个进程
查看glibc源码后发现popen会生成子进程
路径:glibc-2.17/libio/iopopen.c
_IO_FILE *
_IO_new_proc_open (fp, command, mode)
_IO_FILE *fp;
const char *command;
const char *mode;
{
..