syslog 引發死鎖

2021-06-17 21:45:26 字數 907 閱讀 3353

主線程在寫 syslog,同時在訊號處理函式中也在寫syslog,當主線程在寫的時候,如果同時觸發了訊號,那麼將會導致死鎖。

$pstack 4289

#0 0x00000036768df9ee in __lll_lock_wait_private () from /lib64/libc.so.6

#1 0x000000367688d0dd in _l_lock_1685 () from /lib64/libc.so.6

#2 0x000000367688ce27 in __tz_convert () from /lib64/libc.so.6

#3 0x00000036768cff7d in __vsyslog_chk () from /lib64/libc.so.6

#4 0x00000036768d0580 in syslog () from /lib64/libc.so.6

#5 0x00000000004c8c81 in sigchldhandler ()

#6#7 0x000000367688d2ad in __tzfile_compute () from /lib64/libc.so.6

#8 0x000000367688ce5f in __tz_convert () from /lib64/libc.so.6

#9 0x00000036768cff7d in __vsyslog_chk () from /lib64/libc.so.6

#10 0x00000036768d0580 in syslog () from /lib64/libc.so.6

#11 0x00000000004c5c21 in handlenewbinrequest ()

根本原因是syslog內部會呼叫malloc,而malloc是不可重入函式,在訊號處理函式中呼叫不可重入函式會導致死鎖問題。

Go select 死鎖引發的思考

一文引發的延續思考 package main import fmt func main fmt.println the val ch func getval i int int無論 select 最終選擇了哪個 case,getval 都會按照原始碼順序執行 getval 1 和 getval 2 ...

syslog列印不帶等級 syslog日誌等級

設施.優先順序 facility.priority 設施 facility kern 0 核心日誌訊息 user 1 隨機的使用者日誌訊息 mail 2 郵件系統日誌訊息 daemon 3 系統守護程序日誌訊息 auth 4 安全管理日誌訊息 syslog 5 syslogd本身的日誌訊息 lpr ...

Go語言學習日誌之channel引發死鎖問題

今天在看到go中的channel時,就自己動手試了一下這個資料結構,先貼原始 package main import fmt time func main 乍一看沒毛病,但就是這麼簡單的乙個測試執行就直接報錯了 fatal error all goroutines are asleep deadlo...