ฉันต้องการค้นหากระบวนการบางอย่างและฆ่ากระบวนการนั้น ฉันเขียนคำสั่งดังนี้:
ps -e | grep dmn | awk '{print $1}' | kill
dmn
ที่ไหนชื่อกระบวนการคือ แต่มันไม่ทำงาน ฉันจะค้นหากระบวนการตามชื่อและกระบวนการkill
ได้อย่างไร
ฉันต้องการค้นหากระบวนการบางอย่างและฆ่ากระบวนการนั้น ฉันเขียนคำสั่งดังนี้:
ps -e | grep dmn | awk '{print $1}' | kill
dmn
ที่ไหนชื่อกระบวนการคือ แต่มันไม่ทำงาน ฉันจะค้นหากระบวนการตามชื่อและกระบวนการkill
ได้อย่างไร
คำตอบ:
kill $(ps -e | grep dmn | awk '{print $1}')
kill $(ps -efw | grep dmn | grep -v grep | awk '{print $2}')
ได้: ไม่แน่ใจว่าทำไมและไม่สนใจมากพอที่จะดูเพิ่มเติมในนั้น
kill
พยายามฆ่าแม้กระทั่งกระบวนการ 'grep' ซึ่งพยายามค้นหารูปแบบ
\n
หลังจากแต่ละ awk เช่นในawk '{print $1"\n"}'
?
ในกรณีที่มีหลายกระบวนการที่คุณต้องการลบคุณสามารถใช้สิ่งนี้:
ps -efw | grep dmn | grep -v grep | awk '{print $2}' | xargs kill
หมายเหตุ: คุณต้องลบกระบวนการ grep ออกจากเอาต์พุตนั่นคือเหตุผลที่grep -v grep
ใช้
แค่เพิ่มคนอื่น ๆ แต่ฉันชอบใช้ความจุคุณสมบัติ regex ของ awk:
kill $(ps | awk '/dmn/{print $1}')
หากคุณมีpidof
คำสั่งในระบบของคุณ (ฉันรู้ว่าเชลล์เช่น ZSH มาพร้อมกับสิ่งนี้โดยค่าเริ่มต้นเว้นแต่ฉันจะเข้าใจผิด) คุณสามารถทำสิ่งต่างๆเช่น.
kill -9 $(pidof dmn)
คุณยังสามารถใช้killall :
killall dmn
คุณอาจไม่ต้องการpipe
สิ่งนี้หากคุณมีpidof
คำสั่งและรู้ชื่อภาพฉันก็ทำแบบนี้:
kill $(pidof synergyc)
$()
ฉันเข้าใจสิ่งนี้เนื่องจากมันแปลงเอาต์พุตนั้นเป็นตัวแปรที่ kill สามารถใช้ได้โดยพื้นฐานแล้วเหมือนกับที่ไพพ์ทำ สั้นและเข้าใจง่ายกว่าตัวเลือกอื่น ๆ แต่อาจยืดหยุ่นน้อยกว่าและตรงกว่า
for procid in $(ps -aux | grep "some search" | awk '{print $2}'); do kill -9 $procid; done
สวัสดีเพื่อน ๆ .. เราสามารถทำได้โดยใช้ห่วง
"การค้นหาบางรายการ" อยู่ที่นี่ชื่อกระบวนการที่คุณต้องการค้นหาตัวอย่างเช่น "java" ดังนั้นสมมติว่าจำนวนกระบวนการ java คือ 200+ ดังนั้นการฆ่าทีละรายการจะเป็นเรื่องปกติเกินไป
เพื่อให้คุณสามารถใช้คำสั่งดังกล่าวได้
ขอบคุณ.
$()
ไวยากรณ์ที่ใหม่กว่า:kill $(ps -e | grep dmn | awk '{print $1}')
.