亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

golang 在正在運行的二進制文件/進程上執行命令

golang 在正在運行的二進制文件/進程上執行命令

Go
楊__羊羊 2021-08-16 19:03:18
如果您查看 Nginx,它會調用“nginx reload”來重新加載自身。有沒有辦法從命令行向正在運行的進程發送信號?即使主進程啟動子進程,我如何向主進程發送命令以通知其子進程?前任:myapp start -debug // starts a servermyapp reload -gracefull // stops the app gracefully現在我需要發送 os 信號來通知我的服務器執行正常關機kill -QUIT pidkill -USR2 pid我希望我的問題足夠清楚 Thnx
查看完整描述

2 回答

?
牧羊人nacy

TA貢獻1862條經驗 獲得超7個贊

接收信號

看一下os/signal包裝。


封裝信號實現對傳入信號的訪問。


文檔中甚至還有一個例子:


// Set up channel on which to send signal notifications.

// We must use a buffered channel or risk missing the signal

// if we're not ready to receive when the signal is sent.

c := make(chan os.Signal, 1)

signal.Notify(c, os.Interrupt, os.Kill)


// Block until a signal is received.

s := <-c

fmt.Println("Got signal:", s)

發送信號

要了解如何發送信號,請看一看signal_test.go,它使用syscall. 例如 :


// Send this process a SIGHUP

t.Logf("sighup...")

syscall.Kill(syscall.Getpid(), syscall.SIGHUP)

waitSig(t, c, syscall.SIGHUP)


查看完整回答
反對 回復 2021-08-16
?
慕慕森

TA貢獻1856條經驗 獲得超17個贊

我發現在 go i 中我們可以將環境傳遞給 syscall.Exec

err := syscall.Exec(argv0. os.Args. os.Environ())

只需將當前 env 復制到子進程。


查看完整回答
反對 回復 2021-08-16
  • 2 回答
  • 0 關注
  • 286 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號