我试图捕获对stdout (或stderr)的写入,但显然实际数据与退出事件有关。我编写了一个简单的C程序,它可以写入stdout和stderr。
#include <stdio.h>
int
main()
{
printf("Standard output\n");
fprintf(stderr, "Standard error\n");
return 0;
}我用“gcc示例”编写了它。c -o示例。如果我现在开始做系统
sudo sysdig --unbuffered -X syscall.type=write and proc.name=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 没有显示数据,只显示enter事件(>)。而且,标准凿子不会产生任何输出
sudo sysdig --unbuffered -X -c stdout syscall.type=write and proc.name=example问题在我的示例程序中还是在哪里?如果我在没有任何参数的情况下运行sysdig,它有时也会显示某些进程的退出事件。
我正在运行Ubuntu20.04发行版,系统开发的版本是0.26.4。有关系统的更多信息,请参见系统的GitHub库。
发布于 2021-05-20 17:00:19
显然,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
复制相似问题