Strace

是否可以從創建時完全跟踪腳本?如何?

  • January 18, 2017

假設我想將 strace 掛鉤到一個程序以擷取它寫入的文件。我需要一個現有的PID。如果我連接 strace,到那時腳本可能已經寫入了文件,我會錯過的。經典的比賽條件。我現在要做的是嘗試製作另一個執行原始腳本的程序,該程序除了在執行sleep 1命令之前什麼都不做,這樣我就可以得到完整的 strace。這感覺像是一件壞事。如果執行大量腳本,性能問題就會出現。但是如果沒有現有的 PID,我就無法連接 strace。或者?

將腳本替換為執行的包裝器,strace然後啟動原始腳本。這可能涉及

mv yourscript /somewhere/else/yourscript

然後yourscript變成

#!/bin/sh
OUTPUT_TO=`mktemp /tmp/yourscript.$$.XXXXXXXXXX` || exit 1
exec strace -o $OUTPUT_TO ... /somewhere/else/yourscript "$@"

...您需要的任何其他strace參數在哪裡。

作為替代方案,請考慮sysdig,因為它可以通過文件名或使用者名進行跟踪,而無需程序 ID 或包裝腳本:

sysdig -p '%fd.name' proc.name contains yourscript

引用自:https://unix.stackexchange.com/questions/338389