ฉันจะโยง pgrep กับ kill ได้ไหม


31

ฉันสังเกตเห็นว่า|ใช้เพื่อส่งผลลัพธ์ของคำสั่งแรกไปยังอีก ฉันต้องการฆ่ากระบวนการทั้งหมดที่ตรงกับชื่อ
นี่คือสิ่งที่ pgrep ทำตามปกติ:

$ pgrep name
5089
5105

และข้อโต้แย้งหลายประการดูเหมือนจะทำงานกับkill:

sudo kill 5089 5105

แต่นี่เป็นสิ่งที่ผิด:

pgrep name | kill

ดังนั้นจะทำอย่างไรให้ถูกต้อง?


3
pkill. และถ้านั่นไม่ได้มีอยู่, kill $(pgrep ...).
Mikel

ฉันไม่เพียงแค่ถามเพราะคำสั่งเฉพาะเหล่านั้น แต่ยังเพื่อให้เข้าใจการผูกมัดคำสั่งได้ดีขึ้น แต่อย่างที่ฉันเห็นได้จากคะแนนคำถามคำถามที่เข้าใจจะไม่เป็นที่พอใจ ...
Tomáš Zato - Reinstate Monica

หากคุณต้องการทำให้คำถามกว้างขึ้นและทำให้แน่ใจว่าไม่ใช่คำถามซ้ำฉันสามารถลงคะแนนได้
Mikel

ขออภัยลบความคิดเห็นก่อนหน้าของฉันโดยไม่ตั้งใจ ฉันอยู่บนแท็บเล็ตและไซต์นี้มีปุ่มเล็ก ๆ อยู่ติดกัน
Mikel

ผมก็แค่บอกว่าฉัน downvoted man pgrepเพราะคำถามของคุณไม่ได้ดูเหมือนจะถามอะไรก็ได้ที่คุณอาจจะไม่ได้เรียนรู้จาก ปุ่ม downvote บอกว่ามันเป็นคำถามที่ไม่ต้องทำการวิจัยและฉันไม่เห็นคำถามของคุณ ขออภัยหากดูว่ารุนแรง
มิเคล

คำตอบ:


42

ลองสิ่งนี้:

pgrep name | xargs kill

ถ้าคุณใช้pgrep name | kill, ouput ของpgrep nameฟีดที่จะ stdin killของ เพราะkillไม่ได้อ่านอาร์กิวเมนต์จาก stdin ดังนั้นสิ่งนี้จะไม่ทำงาน

ใช้xargsมันจะสร้างข้อโต้แย้งสำหรับkillจาก stdin ตัวอย่าง:

$ pgrep bash | xargs echo
5514 22298 23079

5
ไม่มีอะไรเกี่ยวข้องกับการเว้นวรรคกับการขึ้นบรรทัดใหม่ เพียงเพราะการฆ่าไม่ได้อ่านอาร์กิวเมนต์ใน stdin
Mikel

@ Mikel: ความผิดพลาดของฉันคงที่
cuonglm


5

เพื่อตอบคำถามทั่วไปมากกว่าเฉพาะ ...

ไพพ์ใช้สำหรับส่งเอาต์พุตจากโปรแกรมหนึ่งเป็นอินพุตไปยังโปรแกรมอื่น

ดูเหมือนว่าคุณกำลังพยายามใช้เอาต์พุตของโปรแกรมหนึ่งเป็นอาร์กิวเมนต์บรรทัดคำสั่งไปยังโปรแกรมอื่นซึ่งแตกต่างกัน

จะทำอย่างไรที่ใช้แทนคำสั่ง

ตัวอย่างเช่นถ้าคุณต้องการเรียกใช้

sudo kill 5089 5105

และคุณมีคำสั่งpgrep nameที่ส่งออก5089 5105

คุณทำให้พวกมันเหมือนกัน

sudo kill $(pgrep name)

ขอบคุณมาก. ฉันหวังว่านี่จะช่วยผู้เริ่มต้นคนอื่น ๆ ด้วย
Tomáš Zato - Reinstate Monica
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.