วิธีรับ pgrep เพื่อแสดงข้อมูลกระบวนการทั้งหมด


26

มีวิธีใดบ้างที่จะpgrepให้ข้อมูลทั้งหมดเกี่ยวกับแต่ละกระบวนการที่psทำ ฉันรู้ว่าฉันสามารถpsผ่านไปได้grepแต่มันก็มีการพิมพ์จำนวนมากและมันก็ทำให้ฉันมีgrepกระบวนการที่ฉันไม่ต้องการ

คำตอบ:


22

pgrepตัวเลือกการส่งออกค่อนข้าง จำกัด คุณจะต้องส่งข้อมูลกลับpsไปเพื่อรับข้อมูลที่สำคัญ ~/.bashrcคุณสามารถโดยอัตโนมัติโดยใช้ฟังก์ชั่นทุบตีในของคุณ

function ppgrep() { pgrep "$@" | xargs --no-run-if-empty ps fp; }

จากนั้นเรียกคำสั่งด้วย

ppgrep <pattern>

2
ขอบคุณ! ฉันแก้ไขมันเป็น: function ppgrep() { pgrep "$@" | xargs ps fp 2> /dev/null; } มิฉะนั้นหากไม่มีกระบวนการใดที่ตรงกับการค้นหาของคุณก็จะทำให้ปริมาณpsการใช้งานทั้งหมดลดลง
JoelFan

สำหรับ OS X psความต้องการยัติภังค์สำหรับธง:function ppgrep() { pgrep "$@" | xargs ps -fp 2> /dev/null; }
Erik Nomitch

1
หากคุณต้องการหลีกเลี่ยงหน้าการใช้งาน ps GNU xargs มีตัวเลือก-rซึ่งจะดำเนินการคำสั่งเฉพาะเมื่อได้รับรายการเท่านั้น
Doug

1
วิธีที่รัดกุมมากขึ้นคือps fp $(pgrep -d, "$@")
Igor Mikushkin

14

รวมpgrepกับpsการใช้xargs!

pgrep <your pgrep-criteria> | xargs ps <your ps options> -p

ตัวอย่างเช่นลอง

pgrep -u user | xargs ps -f -p

userที่จะได้รับรายชื่อกระบวนการเต็มรูปแบบของ

มันดีที่คุณเก็บบรรทัดแรกด้วยชื่อคอลัมน์ grepปล่อยชื่อคอลัมน์เสมอ


! ที่ดีเยี่ยม สิ่งนี้จะช่วยแก้ปัญหาที่ไม่คาดคิดกับสคริปต์เริ่มต้นเซิร์ฟเวอร์ arcgis สำหรับ xfvb
prusswan

นี่ควรเป็นคำตอบที่ได้รับการยอมรับเพราะใช้ unix pipes ในวิธีที่เหมาะสมนำรายการ PID จากเครื่องมือหนึ่งและป้อนกลับเข้าไปอีกอันหนึ่ง (ถ้ามันดูเหมือนว่าแฮกเกอร์ไม่ใช่ - เทคนิคนี้สามารถใช้ในเครื่องมือ UNIX จำนวนมาก เช่นเดียวกับเครื่องมือ grep อีเมลฟังก์ชัน Bash ppgrep () เป็นการพึ่งพาที่ไม่จำเป็นและหลีกเลี่ยงการเผชิญหน้ากับโอกาสการเรียนรู้ที่นำเสนอที่นี่)
Scott Prive

10

ต่อไปนี้ให้ PID + บรรทัดคำสั่งแบบเต็มเท่านั้น สำหรับ "ข้อมูลทั้งหมดpsทำ" ดูคำตอบอื่น ๆ ...

Linuxes ส่วนใหญ่ใช้procps-ng ตั้งแต่ 3.3.4 (เปิดตัวในปี 2012), pgrep -a( --list-full) แสดงบรรทัดคำสั่งแบบเต็ม
หมายเหตุ: โดยค่าเริ่มต้น pgrep ตรงกับรูปแบบที่คุณให้กับชื่อที่ปฏิบัติการได้ หากคุณต้องการจับคู่กับบรรทัดคำสั่งแบบเต็ม (เหมือน grepping ps) ให้เพิ่มตัวเลือก-f( --full)

ในเวอร์ชันที่เก่ากว่า (รวมถึงโครงการprocpsดั้งเดิม) -lตัวเลือกแสดงข้อมูล แต่ลักษณะการทำงานแตกต่างกัน

  • pgrep -fl จับคู่รูปแบบกับบรรทัดคำสั่งแบบเต็มและแสดงบรรทัดคำสั่งแบบเต็ม
  • pgrep -lจับคู่เพียงชื่อที่ปฏิบัติการได้เท่านั้นและแสดงเฉพาะชื่อที่สามารถเรียกทำงาน
    หากคุณไม่ต้องการจับคู่แบบเต็มคุณจะไม่เห็นบรรทัดคำสั่งแบบเต็ม :-( [ https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=526355#15 ]

ไม่แน่ใจว่าใช้รหัส * BSD ใด แต่หน้าเอกสารยืนยัน-flพฤติกรรมเก่า

น่าเสียดายที่คุณไม่สามารถใช้-flพอร์ตแบบพกพาได้ใน procps-ng เมื่อเร็ว ๆ นี้-f( --list-name) จะพิมพ์เฉพาะชื่อปฏิบัติการเท่านั้น


4

ลินุกซ์

สำหรับรุ่น GNU ของ(กรณีไม่รู้สึก) ไม่ได้รับการสนับสนุนและยาว + เอาท์พุทเลือนจะประสบความสำเร็จกับpgrep-i-af

$ pgrep -af apache

OUTPUT:
    1748 /usr/sbin/apache2 -k start

หน้าคน :

   -a, --list-full
       List  the  full  command line as well as the process ID.  (pgrep only.)

   -f, --full
       The pattern is normally only matched against the process name.  
       When -f is set, the full command  line is used.

MacOS

บน OSX (และโดยการอนุมานบน BSD) -l( เอาต์พุตยาว ) ร่วมกับ-f( จับคู่กับรายการอาร์กิวเมนต์ทั้งหมด ) จะแสดงคำสั่งทั้งหมด ( -iเพิ่มตัวพิมพ์เล็กและตัวพิมพ์ใหญ่):

$ pgrep -fil ssh

OUTPUT:
    33770 ssh: abc@192.168.0.123-22 [mux] t

หน้าคน :

 -l          Long output.  For pgrep, print the
             process name in addition to the
             process ID for each matching
             process.  If used in conjunction
             with -f, print the process ID and
             the full argument list for each
             matching process.  For pkill, dis-
             play the kill command used for
             each process killed.

1

ใช้อ็อพชัน -v เพื่อ grep - ส่งคืนทุกอย่าง แต่รูปแบบที่ร้องขอ

ps -ef | grep <process> | grep -v grep

นี่คือคำตอบที่ดีที่สุดสำหรับฉัน มันแสดงให้คุณเห็นคำสั่งเต็มรูปแบบโดยไม่ต้องถูกตัดทอนอย่างที่มันเกิดขึ้นกับpgrep -u user | xargs ps -f -p
BringBackCommodore64

0

ฉันไม่คิดว่ามีข้อมูลส่วนใหญ่ที่คุณจะได้รับคือชื่อและรหัสกระบวนการโดยใช้ตัวเลือก -l เพื่อ pgrep

ps สนับสนุนตัวเลือกการจัดรูปแบบทุกประเภทดังนั้นฉันจะสร้างนามแฝงสำหรับสิ่งที่คุณต้องการบันทึกการพิมพ์ วิธีง่ายๆในการแยกกระบวนการ grep ออกจากเอาต์พุตเพื่อรวมไพพ์ไปgrep -v grepยังเพื่อแยกกระบวนการ grep ใด ๆ



-1

สิ่งนี้จะช่วยให้คุณเดาได้ว่า:

ps auxww


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