วิธีรับ pid ของกระบวนการที่กำลังรันโดยใช้คำสั่งเดียวที่แยกเอาต์พุตของ ps


22

ฉันกำลังมองหาบรรทัดเดียวที่คืนค่า pid ของกระบวนการทำงาน

ปัจจุบันฉันมี:

ps -A -o pid,cmd|grep xxx|head -n 1

pid, commandและส่งกลับกำปั้น ฉันต้องการเฉพาะหมายเลขแรกจากผลลัพธ์และละเว้นส่วนที่เหลือ ฉันคิดว่าsedหรือawkจะช่วยที่นี่ แต่ประสบการณ์ของฉันกับพวกเขามี จำกัด

นอกจากนี้ยังมีปัญหาอื่นมันจะคืนค่า pid ของ grep หาก xxx ไม่ทำงาน

เป็นเรื่องสำคัญมากที่จะมีบรรทัดเดียวเพราะฉันต้องการนำเอาท์พุทกลับมาใช้เพื่อทำอย่างอื่นเช่นฆ่ากระบวนการนั้น


1
ไพพ์ผ่านหัวและระบุบรรทัดที่จะส่งคืนด้วย -n 1?
Mike McMahon

คำตอบ:


28

หากคุณต้องการ pid ของกระบวนการคุณสามารถใช้ประโยชน์ได้pgrepถ้ามี pgrep <command>จะส่งคืน pid ของคำสั่ง (หรือรายการ pids ในกรณีที่มีอินสแตนซ์มากกว่าหนึ่งคำสั่งที่ใช้งานซึ่งในกรณีนี้คุณสามารถใช้ประโยชน์จากheadคำสั่งที่เหมาะสมหรืออื่น ๆ )
หวังว่านี่จะช่วยได้!


+1 การใช้ pgrep ตามปกติของฉัน:kill `pgrep xxx`
Steve


7

ต้องการคำสั่งอีกหนึ่งข้อเท่านั้น คุณต้องการเฉพาะฟิลด์แรกจากบรรทัดของค่าที่คั่นด้วยช่องว่าง:

ps -A -o pid,cmd|grep xxx | grep -v grep |head -n 1 | awk '{print $1}'

ทั้งสอง ฉันเพิ่ม grep ตัวอื่นเพื่อลบ grep ออกจากเอาต์พุต


6

เพียงใช้ pgrep มันตรงไปตรงมามากขึ้น

pgrep -o -x xxxx

ข้างต้นเลือกกระบวนการที่เก่าแก่ที่สุดที่มีชื่อที่แน่นอน


และเนื่องจาก OP ต้องการใช้คำสั่งเพื่อฆ่ากระบวนการpkill(ด้วย args เดียวกัน) จึงเป็นตัวเลือกที่ตรงที่สุด
bstpierre


0

ทำงานบน Cygwin ดังนั้นฉันจึงไม่สามารถใช้ -A และ -o ได้ แต่สิ่งนี้:

$ ps
      PID    PPID    PGID     WINPID   TTY     UID    STIME COMMAND
     4580       1    4580       4580  ?       55573   May 21 /usr/bin/mintty
     5808    7072    5808       7644  pty3    55573 13:35:31 /usr/bin/ps
     7072    5832    7072       6424  pty3    55573   May 21 /usr/bin/bash


$ ps | grep '/usr/bin/mintty' | head -n 1 | awk '{print $1}'
4580

0

คุณสามารถทำสิ่งที่ชอบ

ps -A -o cmd,pid | egrep "^xxx " | head -n 1 | sed -r -e 's/.* ([0-9]+)$/\1/'

จากนั้น xxx ต้องเป็นชื่อกระบวนการและจะไม่รับ grep เนื่องจากตัวยึด ^

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