bước đường ống đến grep


30

Tôi đang cố gắng chạy stracemáng ccze, và đường ống không hoạt động như mong đợi.

Dòng lệnh tôi đang chạy để kiểm tra là sudo strace -p $(pgrep apache2) | grep openvà tất cả các dòng là đầu ra, bỏ qua grep.

Có điều gì đặc biệt về stracenguyên nhân gây ra hành vi này?

Câu trả lời:


48

stracein dấu vết của nó trên lỗi tiêu chuẩn, không phải trên đầu ra tiêu chuẩn. Đó là bởi vì thông thường muốn chuyển hướng đầu ra tiêu chuẩn của chương trình, nhưng thường không phải là vấn đề mà stderr của stracer và stderr của chương trình bị lẫn lộn.

Vì vậy, bạn nên chuyển hướng stracethiết bị xuất chuẩn sang thiết bị xuất chuẩn để có thể chuyển nó:

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

ngoại trừ những gì bạn đang thực sự tìm kiếm là

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

nó hoạt động !! cảm ơn bạn! - Tôi thực sự không cố gắng chỉ nhìn vào opencác cuộc gọi, tôi chỉ lấy đó làm ví dụ, điều tôi thực sự đang cố gắng là làm nổi bật màu sắc
Andrei

Tôi nhận được strace: Invalid process id: '-e'với lệnh cuối cùng. Tôi đang ở phiên bản 4.8. 2010 / 03-30.
Elijah Lynn

Ahh, tôi thực sự có httpd (RHEL).
Elijah Lynn

1
@ElijahLynn Thay thế apache2bằng tên của quá trình bạn đang quan tâm đến việc kiểm tra đó. pgrepIn một PID đơn, nếu không chọn một và chạy ví dụsudo strace -p 1234 -e open
Gilles 'Somali dừng vốn là xấu'

@Andrei, còn việc sử dụng vimtô sáng cú pháp màu thì sao? strace $CMD 2>&1 > /dev/null | vim -c ':set syntax=strace' -.
Pablo A
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.