Ortamlar arasındaki küçük farklılıkların sizi ısıtabileceği birçok durum vardır. Bu, son zamanlarda koştuğum bir şey. Bu iki komut arasındaki fark nedir?
1 ~ $ nohup myprocess.out &
2 ~ $ myprocess.out &
Cevap her zamankiyle aynı - duruma bağlı.
nohup, ve işareti yapmazken kapatma sinyalini yakalar.
Telefonu kapatma sinyali nedir?
SIGHUP - kontrol terminalinde askıda kalma tespit edildi veya kontrol sürecinin ölümü (değer: 1).
Normalde, & komutunu kullanarak ve daha sonra kabuktan çıkarken bir komut çalıştırırken, kabuk, alt-komutu kapatma sinyaliyle sonlandırır (kill -SIGHUP $ PID gibi). Bu, nohup kullanarak önlenebilir, çünkü sinyali yakalar ve asla gerçek uygulamaya erişmeyecek şekilde yok sayar.
Güzel, ama bu durumda olduğu gibi her zaman 'buts' vardır. Kabuk SIGHUP göndermeyecek şekilde yapılandırıldığında bu başlatma yöntemleri arasında bir fark yoktur.
Bash kullanıyorsanız, kabuğunuzun alt işlemlerine SIGHUP gönderip göndermediğini öğrenmek için aşağıdaki komutu kullanabilirsiniz:
~ $ shopt | grep hupon
Ve dahası - nohup'un çalışmadığı durumlar var. Örneğin, başlattığınız işlem NOHUP sinyalini yeniden bağladığında (uygulama kodu düzeyinde yapılır).
Açıklanan durumda, bir özel hizmet başlatma komut dosyası içinde fark eksikliği eksikliği nohup komutu olmadan uygun uygulamayı ayarlayan ve başlatan ikinci bir komut dosyasına çağrı oldu.
Bir Linux ortamında her şey sorunsuz çalıştı, ikincisinde ikinci komut dosyası çıkar çıkmaz uygulamadan çıkıldı (bu vakayı tespit etmek, elbette düşünebileceğinizden çok daha fazla zaman aldı: stuck_out_tongue :).
Nohup'u ikinci komut dosyasına başlatma yöntemi olarak ekledikten sonra, komut dosyaları çıksa ve bu davranış her iki ortamda da tutarlı olsa bile uygulama çalışmaya devam eder.