ทุบตีสคริปต์เพื่อค้นหาและฆ่ากระบวนการด้วยอาร์กิวเมนต์บางอย่าง?


17

ฉันต้องการสคริปต์ที่ฆ่าอินสแตนซ์sshที่ถูกรันด้วยอาร์กิวเมนต์ -D (ตั้งค่าพร็อกซีในเครื่อง)

ฉันทำด้วยตนเองps -A | grep -i sshค้นหาอินสแตนซ์ด้วย -D และkill -9 {id}แต่ละอัน

แต่สิ่งที่ดูเหมือนในรูปแบบสคริปต์ทุบตี?

(ฉันใช้ Mac OS X แต่จะติดตั้งคำสั่งที่จำเป็นผ่านport)


ดูทางเลือก pgrep และ pkill บน mac os x? . pgrepและpkillเป็นคำสั่งเพื่อค้นหาหรือฆ่ากระบวนการตามชื่อภายใต้ Solaris และ Linux
Gilles 'หยุดความชั่วร้าย'

คำตอบ:


26

เรียกใช้pgrep -f "ssh.*-D"และดูว่าส่งคืน ID กระบวนการที่ถูกต้องหรือไม่ ถ้ามันไม่เพียงแค่เปลี่ยนpgrepไปpkillและให้ตัวเลือกที่เหมือนกันและรูปแบบ

นอกจากนี้คุณไม่ควรใช้kill -9aka SIGKILL เว้นแต่จำเป็นจริงๆเพราะโปรแกรมไม่สามารถดัก SIGKILL เพื่อล้างข้อมูลก่อนที่จะออก ฉันเพียงใช้kill -9หลังจากที่พยายามครั้งแรกและ-1 -2-3


คุณควร redefine ฆ่าเป็นforวงที่ไม่kill -iสำหรับแต่ละi;)
เชมัส

1
pgrepไม่ใช่พื้นเมืองใน OSX คุณต้องรับจากบุคคลที่สาม กระทู้ก่อนหน้าในหัวข้อมีข้อเสนอและทางเลือก
Gilles 'หยุดความชั่วร้าย'

ผู้ชายยังมีชีวิตอยู่ฉันยิ่งใช้ 'ระวังมากขึ้นฉันรักมันมากขึ้น :) ขอบคุณสำหรับสิ่งนี้!
javamonkey79

pgrep และ pkill มีอยู่ใน OS X 10.8 (Mountain Lion) และสูงกว่า apple.blogoverflow.com/2012/07/…
Peter Hanley

มันอาจจะมีประโยชน์ในการเพิ่มการ-aตั้งค่าสถานะpgrepที่ทำให้มันพิมพ์ไม่เพียง แต่กระบวนการ ID แต่ยังคำสั่ง (รวมถึงข้อโต้แย้ง) วิธีนี้ง่ายต่อการตรวจสอบว่ามีการจับคู่กระบวนการที่ต้องการเท่านั้น
luator


0

คุณสามารถใช้ประโยชน์จากระบบไฟล์ proc เพื่อรวบรวมข้อมูล ตัวอย่างเช่น:

for proc in $(grep -irl "ssh.*-D" /proc/*/cmdline | grep -v "self"); do if [ -f $proc ]; then cat $proc && echo ""; fi; done

มันไม่สมบูรณ์แบบคุณจะต้องการ regex ที่พิเศษกว่านี้ (โดยเฉพาะถ้าคุณกำลังฆ่ากระบวนการ) แต่echo $proc | awk -F'/' '{ print $3 }'จะแสดง PID ของกระบวนการ


1
OSX /procไม่ได้ และมีเครื่องมือที่แข็งแกร่งในการทำสิ่งนี้เรียกว่าpgrep(มีให้บริการอย่างน้อย Solaris และ Linux)
Gilles 'หยุดความชั่วร้าย'
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.