Score:0

จะฆ่า 3 กระบวนการด้วยชื่อที่แตกต่างกันโดยสิ้นเชิงได้อย่างไร?

ธง in

ฉันต้องการฆ่า 3 กระบวนการด้วยชื่อที่แตกต่างกันทั้งหมด ไม่มีอะไรเหมือนกันเลย ฉันจะทำอย่างไร grep จับพวกมันทั้งหมดไม่ได้เพราะไม่มีอะไรเหมือนกัน หรือมีวิธีทำให้มันจับพวกมันทั้งหมดไหม

Nmath avatar
ng flag
เป็นการยากที่จะตอบคำถามโดยไม่มีรายละเอียดใดๆ สำหรับผู้เริ่มต้น คุณสามารถบอกเราถึงกระบวนการและสาเหตุที่คุณไม่สามารถเรียกใช้คำสั่งเพียงสามคำสั่งได้
guiverc avatar
cn flag
Kill ให้คุณระบุ PID ได้หลายรายการ ดู `man kill` สำหรับหน้าคู่มืออ้างอิง
Quasímodo avatar
jp flag
-1 ฉันไม่เข้าใจสิ่งนี้จริงๆ แม้ว่าทุกคำสั่งที่สามารถฆ่าได้สามารถฆ่าได้เพียงกระบวนการเดียว สิ่งที่คุณต้องทำก็คือออกคำสั่งสามครั้งใช่ไหม?
Score:8
ธง fr

ตัวอย่างสำหรับการฆ่า คำพังเพยดิสก์ และ gnome-ระบบตรวจสอบ.

ฆ่า $ (pidof gnome-disks gnome-system-monitor)

ฉันแน่ใจว่าเรามีสิ่งนี้อยู่แล้วในรูปแบบบางอย่าง เพราะมีคนที่นี่ต้องบอกฉันเกี่ยวกับสิ่งนี้เมื่อหลายปีก่อน

คุณสามารถทำให้สวยขึ้น แต่ซับซ้อนกว่านี้:

# ระบุรายการชื่อโปรแกรมที่คั่นด้วยช่องว่าง
programmes_to_kill="gnome-disks gnome-system-monitor"
ฆ่า $(pidof $programs_to_kill)
melvio avatar
cn flag
โหวตขึ้น @dawnslayer ฉันเสนอให้คุณทำเครื่องหมายว่าเป็นคำตอบที่ยอมรับ วิธีนี้จะเป็นแนวทางที่ดีที่สุดสำหรับคนส่วนใหญ่
Score:4
ธง cn

หากต้องการใช้จริงๆ เกรปปิ้ง, คุณสามารถใช้ได้ พีคิล เพื่อรับรหัสกระบวนการ (pids) พีคิล เกรป สำหรับรูปแบบบางอย่างในชื่อกระบวนการและฆ่ากระบวนการที่พบ

ไวยากรณ์ที่คุณสามารถใช้ได้คือ:

pkill 'process_name1|other_process|something_else'

คุณสามารถใช้ได้ pgrep (กระบวนการ grep) เพื่อตรวจสอบสิ่งที่คุณกำลังจะฆ่าด้วย พีคิล.
ไวยากรณ์คล้ายกันมาก:

pgrep -l 'proces_name1|other_process|something_else'

ตัวอย่างเช่น ถ้าฉันรันคำสั่งต่อไปนี้บนเครื่องของฉัน ฉันจะได้รับรายการที่ตรงกับคำสั่งเหล่านั้น ปิดส:

$ pgrep -l 'clamd|นักเทียบท่า|snapd'
พ.ศ. 2495
พ.ศ. 2532
นักเทียบท่า 2085
2813 นักเทียบท่า

คำเตือน: หากคุณทราบชื่อกระบวนการทั้งหมดจริงๆ โปรดใช้ LiveWireBTคำตอบของ:

ฆ่า $ (pidof process_name1 other_proces)

ทางนั้น, ssh-ตัวแทน และ sshd จะได้ไม่ตกเป็นเหยื่อเมื่อคุณวิ่งหนี pkill ssh และไม่ได้สนใจอะไร pgrep -l ssh กล่าว.

melvio avatar
cn flag
โปรดทราบว่าฉันจะใช้คำตอบ @LiveWireBT เป็นการส่วนตัว Grepping อาจเป็นเรื่องยุ่งยากและคุณอาจจบลงด้วยการฆ่ากระบวนการน้อยเกินไป หรือแย่กว่านั้นคือมีจำนวนมากเกินไป อย่างไรก็ตาม เนื่องจากคุณพูดถึง grep ฉันจึงเพิ่มคำตอบนี้เพื่อให้ฟังก์ชันการทำงานแก่คุณ
Peter Cordes avatar
fr flag
คุณสามารถยึดรูปแบบด้วย `^foo$|^bar$` หรือบางอย่างเพื่อบังคับให้ตรงกับชื่อกระบวนการทั้งหมด แทนที่จะเป็นสตริงย่อยที่สามารถจับคู่มากเกินไปได้ง่ายหรือไม่ หรือตัวเลือก pkill/pgrep ที่ต้องการการจับคู่แบบเต็มสตริงเช่น `grep -x`
melvio avatar
cn flag
ความคิดเห็น @PeterCordes แสดงปัญหาของ grep อย่างแม่นยำ; มันเสี่ยงกว่าที่จำเป็นถ้าคุณรู้ชื่อเต็มแล้ว หากคุณรู้ชื่อเต็มของกระบวนการที่จะฆ่า ฉันจะไม่ยุ่งกับ `-x` หรือ `^ชื่อกระบวนการ$` ด้วยซ้ำ ฉันจะใช้โซลูชันของ @LiveWireBT แทน ใช้สิ่งนี้เฉพาะในกรณีที่คุณต้องการรวมฟังก์ชัน `grep`+`kill`
Peter Cordes avatar
fr flag
แน่นอน แต่ถ้าคุณต้องการโพสต์เกี่ยวกับ grep เลย คุณสามารถระบุได้ว่าความเสี่ยงคืออะไร และอะไรทำให้สะดวกในการใช้งานอย่างปลอดภัย
melvio avatar
cn flag
ฉันเห็นด้วย @PeterCordes ฉันได้เพิ่มหมายเหตุ **คำเตือน** แล้ว ฉันยังยินดีที่จะยอมรับการแก้ไขเพิ่มเติมที่อธิบายการแลกเปลี่ยน/ความเสี่ยง/คำเตือน
Score:2
ธง my
ชื่อคิลออล1 && ชื่อคิลออล2 && ชื่อคิลออล3
LiveWireBT avatar
fr flag
เกร็ดเล็กเกร็ดน้อย: ในงานเมื่อไม่กี่ปีที่ผ่านมา เราต้องตรวจสอบแอปพลิเคชันจาวาและรีสตาร์ทหากจำเป็น ดังนั้นฉันจึงใช้ `killall` เพื่อฆ่ากระบวนการ ซึ่งก็ใช้ได้ ฉันรีสตาร์ทมันเหมือนในเอกสารที่เรามี ไม่เป็นไร จนกว่าจะถึงวันถัดไป (หรืออีกสองสามวัน) เมื่อฝ่ายสนับสนุนระดับที่สองถามว่าฉันฆ่ากระบวนการได้อย่างไร เนื่องจากแอปพลิเคชันจาวาที่ควรตรวจสอบกระบวนการ "ตาย" และไม่กลับมา อย่างไรก็ตาม แอปพลิเคชันนั้นไม่ได้อยู่ในเอกสารของเรา สิ่งที่คนโง่ทำ :-) (เข้าใจแพลตฟอร์มแอปพลิเคชันไม่ดี เอกสารประกอบไม่ดี)
LiveWireBT avatar
fr flag
สวัสดีผู้ร่วมให้ข้อมูลใหม่ กรุณาระบุคำตอบให้ครบถ้วน อาจเป็นเรื่องน่าสนใจว่าทำไมคุณถึงเลือกที่จะยกเลิกหากคำสั่ง kill แรกไม่สำเร็จ ซึ่งเป็นสิ่งที่การผูกมัดคำสั่งร่วมกับ `&&` ทำใน bash
bac0n avatar
cn flag
`killall name1 name2 name3` จะทำ
Score:-1
ธง us

สมมติว่าคุณสามารถเลือกกระบวนการทั้งสามตามชื่อได้ วิธีแก้ไขของฉันคือ:

ฆ่า `ps awx| grep -E '((ProcessNameA)|(ProcessNameB)|(ProcessNameC))' |grep -v grep| sed "s/ .*$//"`
LiveWireBT avatar
fr flag
A well known hack to avoid `grep 'pattern' | grep -v grep` is to use `grep '[p]attern'`. :-)
LiveWireBT avatar
fr flag
It probably gets the job done, but you should study more manpages of the tools available. I built similar things years ago which coworkers were afraid to touch. I know when I mangle too much through grep and sed, then I should take a look at awk or rethink the whole thing. shellcheck is a useful tool. Googles Shell Style Guide is also worth a read.

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา