วิธีฆ่า daemon ด้วยชื่ออย่างสง่างาม


16

killallฉันมักจะฆ่ากระบวนการด้วย

killall markdoc

แต่ฉันไม่แน่ใจว่าคำสั่งนี้ยุติกระบวนการอย่างสง่างาม คำสั่งนี้ประสบความสำเร็จในการยุติอย่างงดงามหรือไม่? หากไม่เป็นเช่นนั้นฉันจะฆ่ากระบวนการด้วยชื่ออย่างสง่างามได้อย่างไร


การกระจายของคุณมีstart-stop-daemonหรือไม่?
จัดการ

ฉันใช้อูบุนตู 10.04 LTS เซิร์ฟเวอร์ x64 ภูตนั่นอะไร?
Eonil

เป็นเครื่องมือทั่วไปสำหรับการเริ่ม / หยุด daemons และจัดการข้อมูลที่เกี่ยวข้องเช่นไฟล์ pid มันมีอยู่ในอูบุนตูเห็นหน้าคนของตน
จัดการ

คำตอบ:


19

คำถามของคุณไม่ชัดเจนคุณพูดถึงภูตในชื่อ แต่ในร่างกายพูดคุยเกี่ยวกับกระบวนการทั่วไปเท่านั้น

สำหรับดีมอนมีวิธีการเฉพาะในการหยุดมันตัวอย่างเช่นใน Debian ที่คุณมี

    service daemon-name stop

หรือ

    /etc/init.d/daemon-name stop

มีไวยากรณ์ที่คล้ายกันสำหรับมาตรฐาน initscript อื่น ๆ ที่ใช้ในดิสทริบิวชันอื่น ๆ / OS

ในการฆ่ากระบวนการที่ไม่ใช่ภูตหากว่ามันเป็นวิธีที่ไม่สามารถควบคุมได้คุณสามารถใช้อย่างปลอดภัยkillallหรือpkillเนื่องจากพวกเขาใช้โดยค่าเริ่มต้นSIGTERMสัญญาณ (15) และแอปพลิเคชันใด ๆ ที่เขียนอย่างเหมาะสมควรจับและออกจากการรับสัญญาณนี้ . โปรดคำนึงถึงว่ายูทิลิตี้เหล่านี้อาจฆ่ากระบวนการนั้นมากกว่าหนึ่งกระบวนการหากมีหลายรายการที่มีชื่อเหมือนกัน

หากไม่ได้ผลคุณสามารถลองSIGINT(2) จากนั้นSIGHUP(1) และเป็นทางเลือกสุดท้ายSIGKILL(9) แอปพลิเคชันไม่สามารถรับสัญญาณล่าสุดนี้ได้ดังนั้นจึงไม่สามารถทำการล้างข้อมูลได้ ด้วยเหตุนี้จึงควรหลีกเลี่ยงทุกครั้งที่ทำได้

ทั้งpkillและkillallยอมรับพารามิเตอร์สัญญาณในแบบฟอร์ม-NAMEเช่นใน

pkill -INT process-name

ขอขอบคุณ. ที่จริงคำถามเดิมของฉันเป็นเรื่องเกี่ยวกับและmarkdoc serve & svnserve -dฉันคิดว่ามันเป็นภูตชนิดหนึ่ง แต่ไม่มีอะไรที่แน่นอนสำหรับฉัน :)
454 Eonil

killallเป็นนักฆ่า!
xdevs23

3

ใน BSD like และ distros อื่น ๆ คุณมักจะมีสคริปต์ใน /etc/rc.d/ ซึ่งโดยทั่วไปจะจัดการเริ่มต้นเริ่มต้นใหม่และหยุด daemons ในระบบของคุณ หากต้องการหยุด daemon คุณจะต้องเรียกสคริปต์ด้วยพา ธ สัมบูรณ์เช่น:

# /etc/rc.d/acpid stop

หรือใช้คำสั่ง:

# rc.d stop acpid

ฉันขอแนะนำให้ลองใช้สคริปต์นี้เพื่อแสดงระบบของคุณที่เริ่มต้นและหยุดทำงาน daemons:

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

ตรวจสอบkillprocฟังก์ชั่นที่มีอยู่ใน/etc/init.d/functionsสคริปต์แหล่งไฟล์และใช้ฟังก์ชั่น หรือใช้pgrepและpkillยูทิลิตี้เพื่อตรวจสอบว่าพวกเขาทำงานอย่างตั้งใจแล้วใช้พวกเขา ตัวอย่าง: pkill -SIGTERM mysqldจะส่งสัญญาณ kill TERM เพื่อให้ mysqld ทำการปิดระบบอย่างปลอดภัยและล้างฐานข้อมูลลงบนดิสก์ก่อนที่จะถูกฆ่า

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.