Linux
Sysdig 不顯示寫入系統呼叫的退出事件
我正在嘗試擷取對標準輸出(或標準錯誤)的寫入,但顯然實際數據與退出事件有關。我寫了一個簡單的 C 程序來寫入標準輸出和標準錯誤。
#include <stdio.h> int main() { printf("Standard output\n"); fprintf(stderr, "Standard error\n"); return 0; }
我用’gcc example.c -o example’編譯它。如果我現在開始 sysdig
sudo sysdig --unbuffered -X syscall.type=write and proc.name=example
並執行./example,我得到以下輸出
91612 20:12:09.273696708 2 example (12909) > write fd=1(<f>/dev/pts/1) size=16 91613 20:12:09.273726879 2 example (12909) > write fd=2(<f>/dev/pts/1) size=15
不顯示數據,僅顯示輸入事件 (>)。標準輸出鑿子也不會產生任何輸出
sudo sysdig --unbuffered -X -c stdout syscall.type=write and proc.name=example
問題出在我的範常式序中還是在哪裡?如果我在沒有任何參數的情況下執行 sysdig,它有時還會顯示某些程序的退出事件。
我正在執行 Ubuntu 20.04 發行版,sysdig 的版本是 0.26.4。有關 sysdig 的更多資訊,請參閱 sysdig的 GitHub 儲存庫。
顯然 Ubuntu 附帶的版本存在一些問題。我從 sysdig 網站下載了最新版本(0.27.1),現在結果是正確的:
65099 19:55:54.695520567 7 example (10805) > write fd=1(<f>/dev/pts/0) size=16 65102 19:55:54.695526434 7 example (10805) < write res=16 data= 0x0000: 5374 616e 6461 7264 206f 7574 7075 740a Standard output. 65103 19:55:54.695528110 7 example (10805) > write fd=2(<f>/dev/pts/0) size=15 65104 19:55:54.695529507 7 example (10805) < write res=15 data= 0x0000: 5374 616e 6461 7264 2065 7272 6f72 0a Standard error.