ฉันต้องการใช้ps -ef | grep "keyword"
เพื่อกำหนด pid ของกระบวนการ daemon (มีสตริงเฉพาะในเอาต์พุต ps -ef อยู่ในนั้น)
ฉันสามารถฆ่ากระบวนการโดยpkill keyword
มีคำสั่งใดที่ส่งคืน pid แทนการฆ่ามันหรือไม่? (pidof หรือ pgrep ไม่ทำงาน)
ฉันต้องการใช้ps -ef | grep "keyword"
เพื่อกำหนด pid ของกระบวนการ daemon (มีสตริงเฉพาะในเอาต์พุต ps -ef อยู่ในนั้น)
ฉันสามารถฆ่ากระบวนการโดยpkill keyword
มีคำสั่งใดที่ส่งคืน pid แทนการฆ่ามันหรือไม่? (pidof หรือ pgrep ไม่ทำงาน)
คำตอบ:
คุณสามารถใช้pgrep
ตราบเท่าที่คุณรวมถึง-f
ตัวเลือก ทำให้pgrep
คำหลักที่ตรงกันในคำสั่งทั้งหมด (รวมถึงอาร์กิวเมนต์) แทนที่จะเป็นเพียงชื่อกระบวนการ
pgrep -f keyword
จากหน้าคน :
-f
โดยปกติรูปแบบจะจับคู่กับชื่อกระบวนการเท่านั้น เมื่อ-f
ถูกตั้งค่าจะใช้บรรทัดคำสั่งแบบเต็ม
หากคุณต้องการหลีกเลี่ยง pgrep จริงๆให้ลอง:
ps -ef | awk '/[k]eyword/{print $2}'
สังเกต[]
ตัวอักษรตัวแรกของคีย์เวิร์ด นั่นเป็นเคล็ดลับที่มีประโยชน์ในการหลีกเลี่ยงการจับคู่awk
คำสั่ง
kill -9 `pgrep -f keyword`
ps aux | grep chrome
[k]
pgrep -f
สคริปต์ของฉันกำลังทำงานใน subshell ดังนั้นฉันคิดว่ามันกำลังหยิบคำสั่งหลักขึ้นมา (ยากที่จะทราบแน่นอน - pid ที่ส่งคืนนั้นหายไปเมื่อคำสั่งเสร็จสิ้นแล้ว!)
pkill -9 -f keyword
?
ลอง
ps -ef | grep "KEYWORD" | awk '{print $2}'
คำสั่งนั้นควรให้ PID ของกระบวนการที่มี KEYWORD อยู่ในนั้น ในกรณีนี้awk
กำลังส่งคืนสิ่งที่อยู่ในคอลัมน์ที่ 2 จากเอาต์พุต
| head -1
คุณจะได้รับเป็นครั้งแรกโดยท้าย
ฉันใช้
ps -C "keyword" -o pid=
คำสั่งนี้ควรให้หมายเลข PID แก่คุณ
สิ่งนี้มีอยู่ใน linux: pidof keyword
หากต้องการฆ่ากระบวนการโดยใช้คีย์เวิร์ดเฉพาะคุณสามารถสร้างนามแฝงใน~/.bashrc
(linux) หรือ~/.bash_profile
(mac)
alias killps="kill -9 `ps -ef | grep '[k]eyword' | awk '{print $2}'`"
| head -1
ห่อทั้งหมดนี้ดูดีและเรียบร้อย