Liman işçisi durdurma, konteyner içindeki işlemi doğru şekilde durdurma girişiminde bulunurken liman işçisi öldürme bir öldürme sinyali gönderir mi?
Temel olarak evet, fark incedir, ancak Komut Satırı referansında ana hatlarıyla belirtilmiştir :
- docker stop : Çalışan bir konteyneri durdur ( SIGTERM'i ve daha sonra ödemesiz dönemden sonra SIGKILL'i gönder ) [...] Konteynırın içindeki ana işlem SIGTERM'yi ve ödemesiz bir süre sonunda SIGKILL'i alır. [vurgu madeni]
- liman işçisi öldürme : Çalışan bir kabı öldür ( SIGKILL veya belirtilen sinyali gönder ) [...] Kabın içindeki ana işlem SIGKILL veya --signal seçeneği ile belirtilen herhangi bir sinyal gönderilir. [vurgu madeni]
Bu nedenle stop
, standart POSIX sinyalini göndererek zarif bir kapatmayı tetiklemeye çalışır SIGTERM
, oysaki kill
işlemi varsayılan olarak öldürür (aynı zamanda başka bir sinyal göndermeyi de sağlar):
SIGTERM sinyali sonlandırılmasını istemek için bir işleme gönderilir. SIGKILL sinyalinin aksine, işlem tarafından yakalanabilir, yorumlanabilir veya yoksayılabilir. Bu, sürecin kaynakları serbest bırakarak güzel bir sonlandırma yapmasına ve uygunsa durumu kurtarmasına olanak tanır. SIGINT'in neredeyse SIGTERM ile aynı olduğu unutulmamalıdır.
Zaten zorlanmamakla birlikte, işlemlerin genel olarak SIGTERM
zarafetle ele alınması ve sorumluluklarına bağlı olarak doğru şeyi yapması beklenir - bu durum, zarafet süresinden daha uzun süren zarafi kapatma girişimi nedeniyle kolayca başarısız olabilir; olağanüstü (örneğin veritabanları için); Daha ayrıntılı bir açıklama için bakınız örneğin Major Hayden's SIGTERM - SIGKILL
Bir SIGTERM alındığında uygulama ne yapmak istediğini belirleyebilir. Çoğu uygulama kaynaklarını temizler ve durdurur, ancak bazıları olmayabilir. Bir SIGTERM alındığında bir uygulama tamamen farklı bir şey yapacak şekilde yapılandırılabilir. Ayrıca, uygulama disk G / Ç için beklemek gibi kötü bir durumda ise, gönderilen sinyale müdahale edemeyebilir.