ฉันต้องการใช้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ห่อทั้งหมดนี้ดูดีและเรียบร้อย