尝试使用c i输出strace
命令,编写了此代码片:
int main()
{
FILE* pout;
pout = popen("strace -fp 44030 2>&1 | grep write","r");
char buff[1000];
int d1,d2;
while(1){
if(fgets(buff,1000,pout)!=NULL)
{
printf("buff=%s\n",buff);
}
else
continue;
}
pclose(pout);
}
当我在shell中运行所述命令时,我看到一些输出(44030进程是在另一个终端中运行的top
命令)。但是我在运行程序时什么也看不见
此外,当我用popen
替换"strace -fp 44030 2>&1"
中的命令时,我通过运行我的程序看到strace命令的输出。我已经检查了grep
和popen
中的问题,另一段代码用echo
命令替换了strace。
我的问题在哪里?我在哪里可以找到我的错误?
编辑:
因为我现在等了一段时间,那里有很多输出......我认为这是因为grep命令中的某种缓冲而发生的。
答案 0 :(得分:2)
您只需要在grep中禁用缓冲,您可以使用unbuffer
执行此操作。见这里:https://unix.stackexchange.com/questions/25372/turn-off-buffering-in-pipe