Linux

exec '$@' 有什麼作用?

  • September 5, 2018

我最近在很多docker-entrypoint.sh腳本中都看到了這一點,在網上找不到解釋。我的第一個想法是它與信號有關,但這是一個非常瘋狂的猜測。

"$@"位將擴展到位置參數列表(通常是命令行參數),單獨引用以避免分詞和文件名生成(“globbing”)。

exec用執行其參數產生的程序替換目前程序。

簡而言之,exec "$@"將以這樣一種方式執行命令行參數給出的命令,即目前程序被它替換(如果exec能夠執行該命令)。

另外兩個答案解釋了什麼exec "$@"Stack Overflow 上的這個答案解釋了為什麼它對 Docker 很重要,並且正如您所猜測的,它確實與信號有關:

這在 Docker 中對於正確代理信號很重要。例如,如果 Redis 在沒有 的情況下啟動exec,它將不會收到SIGTERM啟動,docker stop也不會有機會乾淨地關閉。在某些情況下,這可能會導致數據失去或殭屍程序。

如果您確實啟動了子程序(即不使用exec),則父程序將負責處理和轉發適當的信號。supervisord這是在容器中執行多個程序時最好使用或類似的原因之一,因為它會適當地轉發信號。

引用自:https://unix.stackexchange.com/questions/466999