ฉันพยายามวิ่งstraceรางcczeและท่อไม่ทำงานตามที่คาดไว้
บรรทัดคำสั่งที่ฉันใช้เพื่อทดสอบคือsudo strace -p $(pgrep apache2) | grep openและบรรทัดทั้งหมดเป็นเอาต์พุตโดยไม่สนใจ grep
มีอะไรพิเศษเกี่ยวกับstraceสิ่งนี้ที่ทำให้เกิดพฤติกรรมนี้หรือไม่?
ฉันพยายามวิ่งstraceรางcczeและท่อไม่ทำงานตามที่คาดไว้
บรรทัดคำสั่งที่ฉันใช้เพื่อทดสอบคือsudo strace -p $(pgrep apache2) | grep openและบรรทัดทั้งหมดเป็นเอาต์พุตโดยไม่สนใจ grep
มีอะไรพิเศษเกี่ยวกับstraceสิ่งนี้ที่ทำให้เกิดพฤติกรรมนี้หรือไม่?
คำตอบ:
straceพิมพ์ร่องรอยบนข้อผิดพลาดมาตรฐานไม่ได้อยู่ในเอาต์พุตมาตรฐาน นั่นเป็นเพราะเป็นเรื่องปกติที่จะต้องการเปลี่ยนเส้นทางเอาต์พุตมาตรฐานของโปรแกรม แต่โดยทั่วไปแล้วไม่ใช่ปัญหาที่ strace ของ strace และ stderr ของโปรแกรมนั้นผสมกัน
ดังนั้นคุณควรเปลี่ยนเส้นทางstraceของ stderr ไปยัง stdout เพื่อให้สามารถไปป์ได้:
sudo strace -p $(pgrep apache2) 2>&1 | grep open
ยกเว้นว่าสิ่งที่คุณกำลังมองหาคือ
sudo strace -p $(pgrep apache2) -e open
strace: Invalid process id: '-e'รับคำสั่งล่าสุด ฉันใช้เวอร์ชัน 4.8 2010-03-30
apache2ด้วยชื่อของกระบวนการที่คุณสนใจตรวจสอบว่าpgrepพิมพ์ PID เดียวไม่เช่นนั้นเลือกอย่างใดอย่างหนึ่งแล้วเรียกใช้เช่นsudo strace -p 1234 -e open
vimเน้นสีไวยากรณ์? strace $CMD 2>&1 > /dev/null | vim -c ':set syntax=strace' -.
openโทรฉันแค่ใส่ตัวอย่างสิ่งที่ฉันพยายามทำคือการเน้นสี