strace perpipaan untuk grep

30

Saya mencoba menjalankan stracepalung ccze, dan pipa tidak bekerja seperti yang diharapkan.

Baris perintah yang saya jalankan untuk menguji adalah sudo strace -p $(pgrep apache2) | grep open, dan semua baris adalah output, mengabaikan grep.

Adakah sesuatu yang istimewa tentang straceyang menyebabkan perilaku ini?

Andrei
sumber

Jawaban:

48

stracemencetak jejaknya pada kesalahan standar, bukan pada output standar. Itu karena itu umum untuk ingin mengarahkan output standar dari program, tetapi biasanya bukan masalah yang strace's stderr dan stderr program dicampur.

Jadi, Anda harus mengarahkan stracestderr ke stdout untuk dapat mengirimnya:

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

kecuali bahwa apa yang sebenarnya Anda cari adalah

sudo strace -p $(pgrep apache2) -e open
Gilles 'SANGAT berhenti menjadi jahat'
sumber
berhasil!! Terima kasih! - Saya tidak benar-benar mencoba untuk melihat hanya pada openpanggilan, saya hanya menempatkan itu sebagai contoh, apa yang saya benar-benar coba lakukan adalah menyoroti warna
Andrei
Saya mengerti strace: Invalid process id: '-e'dengan perintah terakhir. Saya di versi 4.8. 2010-03-30.
Elijah Lynn
Ahh, sebenarnya saya punya httpd (RHEL).
Elijah Lynn
1
@ElijahLynn Ganti apache2dengan nama proses yang Anda minati. Periksa yang pgrepmencetak PID tunggal, jika tidak pilih satu dan jalankan missudo strace -p 1234 -e open
Gilles 'SO- stop being evil'
@ Andrei, bagaimana dengan menggunakan vimpenyorotan sintaks warna? strace $CMD 2>&1 > /dev/null | vim -c ':set syntax=strace' -.
Pablo A