killall
ฉันมักจะฆ่ากระบวนการด้วย
killall markdoc
แต่ฉันไม่แน่ใจว่าคำสั่งนี้ยุติกระบวนการอย่างสง่างาม คำสั่งนี้ประสบความสำเร็จในการยุติอย่างงดงามหรือไม่? หากไม่เป็นเช่นนั้นฉันจะฆ่ากระบวนการด้วยชื่ออย่างสง่างามได้อย่างไร
killall
ฉันมักจะฆ่ากระบวนการด้วย
killall markdoc
แต่ฉันไม่แน่ใจว่าคำสั่งนี้ยุติกระบวนการอย่างสง่างาม คำสั่งนี้ประสบความสำเร็จในการยุติอย่างงดงามหรือไม่? หากไม่เป็นเช่นนั้นฉันจะฆ่ากระบวนการด้วยชื่ออย่างสง่างามได้อย่างไร
คำตอบ:
คำถามของคุณไม่ชัดเจนคุณพูดถึงภูตในชื่อ แต่ในร่างกายพูดคุยเกี่ยวกับกระบวนการทั่วไปเท่านั้น
สำหรับดีมอนมีวิธีการเฉพาะในการหยุดมันตัวอย่างเช่นใน 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
ฉันคิดว่ามันเป็นภูตชนิดหนึ่ง แต่ไม่มีอะไรที่แน่นอนสำหรับฉัน :)
killall
เป็นนักฆ่า!
ใน 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
ตรวจสอบkillproc
ฟังก์ชั่นที่มีอยู่ใน/etc/init.d/functions
สคริปต์แหล่งไฟล์และใช้ฟังก์ชั่น หรือใช้pgrep
และpkill
ยูทิลิตี้เพื่อตรวจสอบว่าพวกเขาทำงานอย่างตั้งใจแล้วใช้พวกเขา ตัวอย่าง: pkill -SIGTERM mysqld
จะส่งสัญญาณ kill TERM เพื่อให้ mysqld ทำการปิดระบบอย่างปลอดภัยและล้างฐานข้อมูลลงบนดิสก์ก่อนที่จะถูกฆ่า