微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用由 go 构建的死锁

如何解决使用由 go 构建的死锁

我已经编译了一个 so 文件来使用 LD_PRELOAD。使用 LD_PRELOAD so 文件时发生死锁

[golib]# LD_PRELOAD=`pwd`/libshellhook.so bash  grepconf.sh -c
<hang here>

当我使用 gdb 调试时,它是堆栈显示

(gdb) bt
#0  0x00007fdf8d79a995 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
#1  0x00007fdf8e313723 in _cgo_wait_runtime_init_done () at gcc_libinit.c:40
#2  0x00007fdf8e313446 in execve (filename=0x1909350 "/usr/libexec/grepconf.sh",argv=0x1908b00,envp=0x1907d10) at _cgo_export.c:26
#3  0x000000000042fc02 in shell_execve ()

(gdb) info threads
  Id   Target Id         Frame 
* 1    Thread 0x7fdf8e856740 (LWP 25485) "bash" 0x00007fdf8d79a995 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0

去版本

$ go version
go version go1.14.9 linux/amd64

它在 fedora 32 和 centos 6 中工作正常,但在 ubuntu 1804 和 centos 7(3.10.0-862.11.6.el7.x86_64.debug) 中挂起

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。