Sysdig 不显示 write 系统调用的退出事件

Sysdig 不显示 write 系统调用的退出事件

我试图捕获对 stdout (或 stderr)的写入,但显然实际数据与退出事件相关。我编写了一个简单的 C 程序,用于写入 stdout 和 stderr。

#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 存储库

答案1

显然 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.

相关内容