Bagaimana cara membunuh daemon dengan namanya dengan anggun?

16

Saya biasanya membunuh proses dengan killall.

killall markdoc

Tetapi saya tidak yakin apakah perintah ini mengakhiri proses dengan anggun. Apakah perintah ini mencapai pengakhiran yang anggun? Jika tidak, bagaimana saya bisa membunuh proses dengan namanya dengan anggun?

Eonil
sumber
Apakah distribusi Anda memiliki start-stop-daemon ?
manatwork
Saya menggunakan server Ubuntu 10,04 LTS x64 . Daemon apa itu?
Eonil
Ini adalah alat umum untuk memulai / menghentikan daemon dan mengelola informasi terkait, seperti file pid. Ia hadir di Ubuntu, lihat halaman manualnya .
manatwork

Jawaban:

19

Pertanyaan Anda tidak jelas, Anda berbicara tentang daemon di judul, tetapi di tubuh hanya berbicara tentang proses generik.

Untuk daemon ada cara khusus untuk menghentikannya, misalnya dalam Debian yang Anda miliki

    service daemon-name stop

atau

    /etc/init.d/daemon-name stop

Sintaksis serupa ada untuk standar skrip init lain yang digunakan dalam distribusi / OS lain.

Untuk mematikan proses non-daemon, seandainya dalam beberapa cara di luar kendali, Anda dapat dengan aman menggunakan killallatau pkill, mengingat bahwa mereka menggunakan secara default SIGTERMsinyal (15), dan aplikasi tertulis apa pun harus menangkap dan keluar dengan anggun saat menerima sinyal ini . Memperhatikan bahwa utilitas ini dapat membunuh lebih dari satu proses, jika ada banyak dengan nama yang sama.

Jika itu tidak berhasil, Anda dapat mencoba SIGINT(2), lalu SIGHUP(1), dan sebagai upaya terakhir SIGKILL(9). Sinyal terakhir ini tidak dapat ditangkap oleh aplikasi, sehingga tidak dapat melakukan pembersihan. Untuk alasan ini harus dihindari setiap kali Anda bisa.

Keduanya pkilldan killallmenerima parameter sinyal dalam formulir -NAME, seperti pada

pkill -INT process-name
enzotib
sumber
Terima kasih. Sebenarnya pertanyaan awal saya adalah tentang markdoc serve &dan svnserve -d. Saya pikir itu semacam dasmon, tetapi tidak ada yang pasti bagi saya :)
Eonil
killalladalah pembunuhnya!
xdevs23
3

Pada BSD-like dan distro lainnya, Anda akan sering memiliki skrip di /etc/rc.d/ yang biasanya mengelola mulai, mulai ulang, dan hentikan daemon di sistem Anda. Untuk menghentikan daemon, Anda dapat memanggil skrip dengan path absolut misalnya:

# /etc/rc.d/acpid stop

atau gunakan perintah:

# rc.d stop acpid

Saya sangat merekomendasikan untuk mencoba skrip ini untuk menunjukkan sistem Anda mulai dan berhenti daemon:

#!/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

sumber
0

Periksa killprocfungsi yang tersedia dalam /etc/init.d/functionsskrip, sumber file dan gunakan fungsi. Atau gunakan pgrepdan pkillutilitas untuk memeriksa apakah mereka berfungsi dengan benar dan kemudian menggunakannya. Contoh: pkill -SIGTERM mysqldakan mengirim sinyal TERM kill untuk meminta mysqld melakukan shutdown yang aman dan menyiram basis data ke disk, sebelum terbunuh.

Nikhil Mulley
sumber