日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

golang中的信号

發布時間:2025/6/15 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 golang中的信号 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

列出信號

?

發送信號

kill -SIGKILL PID

信號處理

  • 通過kill命令給正在運行的程序發送信號
  • 不處理的話,程序會panic處理

Signal handler可以通過signal()系統調用進行設置。如果沒有設置,缺省的handler會被調用,當然進程也可以設置忽略此信號。
有兩種信號不能被攔截和處理:SIGKILL和SIGSTOP

當接收到信號時,進程會根據信號的響應動作執行相應的操作,信號的響應動作有以下幾種:

  • 中止進程(Term)
  • 忽略信號(Ign)
  • 中止進程并保存內存信息(Core)
  • 停止進程(Stop)
  • 繼續運行進程(Cont)

用戶可以通過signal或sigaction函數修改信號的響應動作(也就是常說的“注冊信號”)。另外,在多線程中,各線程的信號響應動作都是相同的,不能對某個線程設置獨立的響應動作。

信號介紹

  • Ctrl-C 發送 INT signal (SIGINT),通常導致進程結束
  • Ctrl-Z 發送 TSTP signal (SIGTSTP); 通常導致進程掛起(suspend)
  • Ctrl-\ 發送 QUIT signal (SIGQUIT); 通常導致進程結束 和 dump core.
  • Ctrl-T (不是所有的UNIX都支持) 發送INFO signal (SIGINFO); 導致操作系統顯示此運行命令的信息

個平臺的信號定義或許有些不同。下面列出了POSIX中定義的信號。
Linux 使用34-64信號用作實時系統中。
命令man 7 signal提供了官方的信號介紹。

在POSIX.1-1990標準中定義的信號列表

?

?

信號處理

package mainimport "fmt" import "os" import "os/signal" import "syscall"func main() {// Go信號通知通過向一個channel發送``os.Signal`來實現。// 我們將創建一個channel來接受這些通知,同時我們還用// 一個channel來在程序可以退出的時候通知我們sigs := make(chan os.Signal, 1)done := make(chan bool, 1)// `signal.Notify`在給定的channel上面注冊該channel// 可以接受的信號signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)// 這個goroutine阻塞等待信號的到來,當信號到來的時候,// 輸出該信號,然后通知程序可以結束了go func() {sig := <-sigsfmt.Println()fmt.Println(sig)done <- true}()// 程序將等待接受信號,然后退出fmt.Println("awaiting signal")<-donefmt.Println("exiting") }

當運行程序的時候,程序將阻塞等待信號的到來,我們可以使用CTRL+C來發送一個SIGINT信號,這樣程序就會輸出interrupt后退出。

awaiting signalinterrupt exiting

總結

以上是生活随笔為你收集整理的golang中的信号的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。