ท่อ strace ถึง grep


30

ฉันพยายามวิ่งstraceรางcczeและท่อไม่ทำงานตามที่คาดไว้

บรรทัดคำสั่งที่ฉันใช้เพื่อทดสอบคือsudo strace -p $(pgrep apache2) | grep openและบรรทัดทั้งหมดเป็นเอาต์พุตโดยไม่สนใจ grep

มีอะไรพิเศษเกี่ยวกับstraceสิ่งนี้ที่ทำให้เกิดพฤติกรรมนี้หรือไม่?

คำตอบ:


48

straceพิมพ์ร่องรอยบนข้อผิดพลาดมาตรฐานไม่ได้อยู่ในเอาต์พุตมาตรฐาน นั่นเป็นเพราะเป็นเรื่องปกติที่จะต้องการเปลี่ยนเส้นทางเอาต์พุตมาตรฐานของโปรแกรม แต่โดยทั่วไปแล้วไม่ใช่ปัญหาที่ strace ของ strace และ stderr ของโปรแกรมนั้นผสมกัน

ดังนั้นคุณควรเปลี่ยนเส้นทางstraceของ stderr ไปยัง stdout เพื่อให้สามารถไปป์ได้:

sudo strace -p $(pgrep apache2) 2>&1 | grep open

ยกเว้นว่าสิ่งที่คุณกำลังมองหาคือ

sudo strace -p $(pgrep apache2) -e open

มันได้ผล!! ขอขอบคุณ! - จริง ๆ แล้วฉันไม่ได้พยายามดูเฉพาะการopenโทรฉันแค่ใส่ตัวอย่างสิ่งที่ฉันพยายามทำคือการเน้นสี
Andrei

ฉันได้strace: Invalid process id: '-e'รับคำสั่งล่าสุด ฉันใช้เวอร์ชัน 4.8 2010-03-30
เอลียาห์ลินน์

อ่าฉันมี httpd (RHEL) จริงๆ
เอลียาห์ลินน์

1
@ElijahLynn แทนที่apache2ด้วยชื่อของกระบวนการที่คุณสนใจตรวจสอบว่าpgrepพิมพ์ PID เดียวไม่เช่นนั้นเลือกอย่างใดอย่างหนึ่งแล้วเรียกใช้เช่นsudo strace -p 1234 -e open
Gilles 'SO- หยุดความชั่วร้าย'

@Andrei สิ่งที่เกี่ยวกับการใช้vimเน้นสีไวยากรณ์? strace $CMD 2>&1 > /dev/null | vim -c ':set syntax=strace' -.
ปาโบล
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.