Bir daemon adıyla zarif bir şekilde nasıl öldürülür?


16

Genellikle bir işlemi öldürürüm killall.

killall markdoc

Ancak bu komutun işlemi zarif bir şekilde sonlandırıp sonlandırmayacağından emin değilim. Bu komut zarif bir fesih sağlıyor mu? Başlamazsa, adıyla bir işlemi nasıl incelikle öldürebilirim?


Dağıtımınızın start-stop-daemon'u var mı?
manatwork

Ben kullanıyorum Ubuntu 10,04 LTS sunucu x64 . Bu daemon nedir?
Eonil

Bu, cinleri başlatmak / durdurmak ve pid dosyaları gibi ilgili bilgileri yönetmek için genel bir araçtır. Ubuntu'da bulunur, kılavuz sayfasına bakınız .
manatwork

Yanıtlar:


19

Sorunuz net değil, başlıkta bir daemon hakkında konuşuyorsunuz, ancak vücutta sadece genel bir süreç hakkında konuşuyorsunuz.

Bir daemon için, onu durdurmak için belirli yollar vardır, örneğin Debian'da

    service daemon-name stop

veya

    /etc/init.d/daemon-name stop

Benzer sözdizimleri, diğer dağıtımlarda / işletim sistemlerinde kullanılan diğer başlangıç ​​standartları için de mevcuttur.

Daemon olmayan bir süreci öldürmek için, bir şekilde kontrolden çıktığını varsayarsak, güvenle kullanabilir killallveya pkillvarsayılan olarakSIGTERM (15) sinyalini kullandıkları ve herhangi bir düzgün yazılmış uygulamanın bu sinyali alması ve bu sinyalin alınmasından zarif bir şekilde çıkması gerekir. . Aynı ada sahip birçok kişi varsa, bu yardımcı programların birden fazla işlemi öldürebileceğini dikkate alın.

Bu işe yaramazsa, SIGINT(2), sonra SIGHUP(1) ve son çare olarak SIGKILL(9) deneyebilirsiniz . Bu son sinyal uygulama tarafından yakalanamaz, böylece temizleme işlemi gerçekleştirilemez. Bu nedenle her fırsattan kaçınılmalıdır.

Her ikisi de pkillve killallformdaki -NAMEgibi bir sinyal parametresini kabul eder .

pkill -INT process-name

Teşekkür ederim. Aslında benim orijinal soru ilgiliydi markdoc serve &ve svnserve -d. Bence bu bir tür artalan
töreni

killallkatil!
xdevs23

3

BSD benzeri ve diğer dağıtımlarda, genellikle /etc/rc.d/ içinde genellikle sisteminizdeki cinleri başlatmayı, yeniden başlatmayı ve durdurmayı yöneten komut dosyalarınız olur. Bir arka plan programını durdurmak için komut dosyalarını mutlak yolla çağırırsınız:

# /etc/rc.d/acpid stop

veya şu komutu kullanın:

# rc.d stop acpid

Sistemlerinizi başlatılan ve durduran cinleri göstermek için bu komut dosyasını denemenizi tavsiye ederim:

#!/bin/bash

chk_status(){
  target=$1
  if [[ $target != "functions" && $target !=  "functions.d" ]]
  then
    if [[ -f "/var/run/daemons/$target" ]]
     then
       stat="\e[1;32m[RUNNING]"
     else
       stat="\e[1;31m[STOPPED]"
     fi

    printf "$stat \t\e[1;34m$target\e[0;0m\n"
  fi
}

daemons=($(for daemon in /etc/rc.d/*; do echo "${daemon#\/etc\/rc.d\/}"; done))

if [[ $1 != "" ]]
then
 chk_status $1
else
 for d in "${daemons[@]}"; do
   chk_status $d
 done | sort
fi

0

Komut dosyasında killprockullanılabilir işlevi kontrol edin /etc/init.d/functions, dosyayı kaynaklayın ve işlevi kullanın. Ya da amaçlarına uygun çalışıp çalışmadıklarını kontrol etmek pgrepve kullanmak için pkillyardımcı programları kullanın. Örnek: pkill -SIGTERM mysqldmysqld'in güvenli bir kapatma gerçekleştirmesi ve veritabanlarını öldürmeden önce diske akıtması için TERM kill sinyali gönderir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.