มีวิธีใดบ้างที่จะpgrep
ให้ข้อมูลทั้งหมดเกี่ยวกับแต่ละกระบวนการที่ps
ทำ ฉันรู้ว่าฉันสามารถps
ผ่านไปได้grep
แต่มันก็มีการพิมพ์จำนวนมากและมันก็ทำให้ฉันมีgrep
กระบวนการที่ฉันไม่ต้องการ
มีวิธีใดบ้างที่จะpgrep
ให้ข้อมูลทั้งหมดเกี่ยวกับแต่ละกระบวนการที่ps
ทำ ฉันรู้ว่าฉันสามารถps
ผ่านไปได้grep
แต่มันก็มีการพิมพ์จำนวนมากและมันก็ทำให้ฉันมีgrep
กระบวนการที่ฉันไม่ต้องการ
คำตอบ:
pgrep
ตัวเลือกการส่งออกค่อนข้าง จำกัด คุณจะต้องส่งข้อมูลกลับps
ไปเพื่อรับข้อมูลที่สำคัญ ~/.bashrc
คุณสามารถโดยอัตโนมัติโดยใช้ฟังก์ชั่นทุบตีในของคุณ
function ppgrep() { pgrep "$@" | xargs --no-run-if-empty ps fp; }
จากนั้นเรียกคำสั่งด้วย
ppgrep <pattern>
ps
ความต้องการยัติภังค์สำหรับธง:function ppgrep() { pgrep "$@" | xargs ps -fp 2> /dev/null; }
-r
ซึ่งจะดำเนินการคำสั่งเฉพาะเมื่อได้รับรายการเท่านั้น
ps fp $(pgrep -d, "$@")
รวมpgrep
กับps
การใช้xargs
!
pgrep <your pgrep-criteria> | xargs ps <your ps options> -p
ตัวอย่างเช่นลอง
pgrep -u user | xargs ps -f -p
user
ที่จะได้รับรายชื่อกระบวนการเต็มรูปแบบของ
มันดีที่คุณเก็บบรรทัดแรกด้วยชื่อคอลัมน์ grep
ปล่อยชื่อคอลัมน์เสมอ
ต่อไปนี้ให้ PID + บรรทัดคำสั่งแบบเต็มเท่านั้น สำหรับ "ข้อมูลทั้งหมดps
ทำ" ดูคำตอบอื่น ๆ ...
Linuxes ส่วนใหญ่ใช้procps-ng ตั้งแต่ 3.3.4 (เปิดตัวในปี 2012), pgrep -a
( --list-full
) แสดงบรรทัดคำสั่งแบบเต็ม
หมายเหตุ: โดยค่าเริ่มต้น pgrep ตรงกับรูปแบบที่คุณให้กับชื่อที่ปฏิบัติการได้ หากคุณต้องการจับคู่กับบรรทัดคำสั่งแบบเต็ม (เหมือน grepping ps) ให้เพิ่มตัวเลือก-f
( --full
)
ในเวอร์ชันที่เก่ากว่า (รวมถึงโครงการprocpsดั้งเดิม) -l
ตัวเลือกแสดงข้อมูล แต่ลักษณะการทำงานแตกต่างกัน
pgrep -fl
จับคู่รูปแบบกับบรรทัดคำสั่งแบบเต็มและแสดงบรรทัดคำสั่งแบบเต็มpgrep -l
จับคู่เพียงชื่อที่ปฏิบัติการได้เท่านั้นและแสดงเฉพาะชื่อที่สามารถเรียกทำงาน ไม่แน่ใจว่าใช้รหัส * BSD ใด แต่หน้าเอกสารยืนยัน-fl
พฤติกรรมเก่า
น่าเสียดายที่คุณไม่สามารถใช้-fl
พอร์ตแบบพกพาได้ใน procps-ng เมื่อเร็ว ๆ นี้-f
( --list-name
) จะพิมพ์เฉพาะชื่อปฏิบัติการเท่านั้น
สำหรับรุ่น 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.
บน 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.
ใช้อ็อพชัน -v เพื่อ grep - ส่งคืนทุกอย่าง แต่รูปแบบที่ร้องขอ
ps -ef | grep <process> | grep -v grep
pgrep -u user | xargs ps -f -p
ฉันไม่คิดว่ามีข้อมูลส่วนใหญ่ที่คุณจะได้รับคือชื่อและรหัสกระบวนการโดยใช้ตัวเลือก -l เพื่อ pgrep
ps สนับสนุนตัวเลือกการจัดรูปแบบทุกประเภทดังนั้นฉันจะสร้างนามแฝงสำหรับสิ่งที่คุณต้องการบันทึกการพิมพ์ วิธีง่ายๆในการแยกกระบวนการ grep ออกจากเอาต์พุตเพื่อรวมไพพ์ไปgrep -v grep
ยังเพื่อแยกกระบวนการ grep ใด ๆ
เพื่อกำจัดgrep
กระบวนการคุณสามารถใช้วงเล็บเป็นส่วนหนึ่งของรูปแบบของคุณ:
ps -ef | grep '[t]ty'
คุณสามารถทำได้ด้วยps
และpgrep
:
ps -fp $(pgrep -d, tty)
สิ่งนี้จะช่วยให้คุณเดาได้ว่า:
ps auxww
function ppgrep() { pgrep "$@" | xargs ps fp 2> /dev/null; }
มิฉะนั้นหากไม่มีกระบวนการใดที่ตรงกับการค้นหาของคุณก็จะทำให้ปริมาณps
การใช้งานทั้งหมดลดลง