Linux

Sysdig 不顯示寫入系統呼叫的退出事件

  • May 20, 2021

我正在嘗試擷取對標準輸出(或標準錯誤)的寫入,但顯然實際數據與退出事件有關。我寫了一個簡單的 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.

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