ขณะนี้ฉันใช้บรรทัดเช่นนี้ในไฟล์สคริปต์ sh ของฉัน:
kill `ps aux | grep -F 'myServer' | grep -v -F 'grep' | awk '{ print $2 }'`
แต่ฉันสงสัยว่าจะเรียกใช้เฉพาะเมื่อกระบวนการ ( myServer
ที่นี่) กำลังทำงานอยู่หรือไม่
ขณะนี้ฉันใช้บรรทัดเช่นนี้ในไฟล์สคริปต์ sh ของฉัน:
kill `ps aux | grep -F 'myServer' | grep -v -F 'grep' | awk '{ print $2 }'`
แต่ฉันสงสัยว่าจะเรียกใช้เฉพาะเมื่อกระบวนการ ( myServer
ที่นี่) กำลังทำงานอยู่หรือไม่
คำตอบ:
ฉันมักจะใช้ pgrep และ pkill
if pgrep myServer; then pkill myServer; fi
pkill myServer
หรือkillall -q myServer
? ไม่มีข้อเสียในการพยายามฆ่ากระบวนการที่ไม่มีอยู่
|| true
แล้ว
if ! killall -q myServer; then echo ERROR; fi
อะไร
คุณสามารถฆ่ากระบวนการโดยใช้ชื่อpkill
หรือkillall
ตรวจสอบหน้าคนของพวกเขา
kill
นี้จะฆ่าเฉพาะในกรณีที่กระบวนการทำงาน ตัวอย่างเช่นpkill -u myuser -f myprocess\.[0-9]+
แนวทางที่แตกต่างเล็กน้อยจะเป็นดังนี้:
killall PROCESS || echo "Process was not running."
สิ่งนี้จะหลีกเลี่ยง1
Error-Code ที่ส่งคืนจากkillall
คำสั่งหากกระบวนการไม่มีอยู่ echo
เพียงส่วนหนึ่งจะเข้ามาในการดำเนินการหากkillall
ผลตอบแทน1
ในขณะที่ตัวเองจะกลับมา0
(ความสำเร็จ)
killall -q
ดีกว่า
killall -q
ไม่รองรับรสชาติ unix ทั้งหมด macOS Catalina ยังไม่มีอยู่
ลองใช้:
sudo kill `pidof process_name`
โดยที่ process_name เป็นชื่อของกระบวนการที่คุณต้องการฆ่า สิ่งที่ยอดเยี่ยมเกี่ยวกับสิ่งนี้คือ pidof จะแสดงรายการของ pid ของกระบวนการทั้งหมดที่ตรงกับชื่อที่กำหนด เมื่อการฆ่ายอมรับหลาย pid มันจะฆ่าพวกมันทั้งหมดในหนึ่งเดียว
แจ้งให้เราทราบหากสิ่งนี้ช่วยได้
kill `pidof process_name
ถ้ามันไม่ได้กลับรายการที่ว่างเปล่าโทร หากส่งคืนรายการว่างให้ข้ามการเรียก kill
สคริปต์เล็ก ๆ ที่ฉันสร้างขึ้นด้วย R&D ฉันหวังว่าคุณจะชอบมัน
#!/bin/bash
echo " Enter the process name:"
read $proc_name
if pgrep $proc_name
then
echo " $proc_name running "
pkill $proc_name
echo "$proc_name got killed"
else
echo " $proc_name is not running/stopped "
fi
บันทึกด้วยชื่อเช่น script.sh แล้ว
chmod +x script.sh
./script.sh
จากนั้นให้ชื่อกระบวนการของคุณ
หมายเหตุ: ฉันได้ลองมาหลายครั้งแล้วและใช้งานได้ดี
pidof
ตรวจสอบว่ากระบวนการที่มีอยู่ด้วย ถ้าเป็นเช่นนั้นให้ฆ่ามัน
(! pidof process_name) || sudo kill -9 $(pidof process_name)
รหัสการออกเป็น 0 เสมอหลังจากรันคำสั่งข้างต้น
ใช้pkill
กับตัวเลือก-f
pkill -f myServer
ตัวเลือก-f
เป็นรูปแบบที่ปกติจะจับคู่กับชื่อกระบวนการ
ฉันจะใช้:
ps x --no-header -o pid,cmd | awk '!/awk/&&/myServer/{print $1}' | xargs -r kill
การxargs -r
บอกให้รัน kill เฉพาะเมื่อมีอินพุต ps --no-header -eo pid,cmd
ได้รับการส่งออกในรูปแบบที่ดีกว่าสำหรับการแยก
kill
เฉพาะเมื่อกระบวนการทำงานเนื่องจากมีการแย่งชิงระหว่างการทดสอบและการภาวนาของkill
(มันเป็นไปได้ที่กระบวนการหยุดด้วยเหตุผลในช่วงเวลาสั้น ๆ ที่ว่าคนอื่น) คุณควรใช้pkill
หรือkillall
สิ่งใดที่เหมือนกับสิ่งที่คุณพยายามทำ แต่มีน้อยกว่าที่จะพิมพ์ (และอาจมีข้อได้เปรียบอื่น ๆ ด้วย)