2016-07-26 62 views

回答

0

如果我們只是簡單地省略-o foo.txt參數,則輸出將轉換爲標準輸出。我們可以把它管道grep和重定向到文件:

strace -f -T -tt -p 1234 | grep pattern > foo.txt 

要觀看在同一時間輸出:

strace -f -T -tt -p 1234 | grep pattern | tee foo.txt 

如果命令只到作爲一個參數傳遞的文件,我們要過濾/重定向輸出,第一步是檢查它是否實現了幾許約定:您可以指定標準輸入或輸出使用-作爲文件名參數:

some_command - | our_pipe > file.txt 

如果不是,則辦法是使用擊進程替換替換語法:>(output command)<(input command)

some_command >(our_pipe > file.txt) 

的方法替換語法擴展成一個令牌適合作爲文件名參數命令或功能。當程序打開該令牌時,它會根據方向獲取文件描述符到命令的輸入或輸出。

通過進程替換,我們可以重定向頑固程序的輸入或輸出,這些頑固程序只對名稱作爲參數傳遞的文件起作用,並且不支持任何要求使用標準輸入或輸出代替文件。

進程替換使用的令牌是平臺相關的;我們可以看到它使用的是什麼echo。例如在GNU/Linux,猛砸採取/dev/fd操作系統功能的優勢:

$ echo <(ls -l) 
/dev/fd/63 
0

您可以使用下面的命令:

strace -T command 2>&1 >/dev/null | awk '{gsub(/[<>]/,"",$NF)}$NF+.0>1.0' 

說明:

  • strace -T增加了時間花在系統調用結束的那一行,附上<...>
  • 2>&1 >/dev/null | awk pipe stderr到awk。 (strace將其輸出寫入stderr!)
  • awk命令將<>從最後一個字段$NF中刪除,並打印出花費時間高於一秒的行。

也許你也想通過閾值作爲變量awk命令:

strace -T command 2>&1 >/dev/null \ 
    | awk -v thres=0.001 '{gsub(/[<>]/,"",$NF)}$NF+.0>thres+.0' 
相關問題