快速跟踪程序执行进度
2018-08-05 22:59
本文共约 412 字
预计阅读时间约 1 分钟
在编程处理数据量较大的文件时,时常会需要跟踪程序的执行进度,确认其速度能达到预期,不至于需要花费的时间长到完全无法接受。
过去,我通常的做法,会在循环体中手工加入一些print命令,类似:
1time_t t0 = time(NULL);
2size_t count = 0;
3while (readline(line)) { // 每次读取一行
4 ++count;
5 ...
6 process(line); // 处理该行
7 ...
8 time_t now = time(NULL);
9 if (now >= t0 + N) { // 每隔N秒打印一次信息
10 printf("time = %u, count = %u\n", time, count);
11 t0 = now;
12 }
13}今天,新学习到一个好用的命令:pv,能够快速在命令行就实现此追踪功能:
1$ cat input.txt | pv -l | process > output.txt这里,-l参数是让pv按照行计数,缺省是按照字节计数的。更多参数及用法,可以参见其帮助文档:
1$ man pvLinux命令行的组合是异常强大的,借此,我们甚至可以动态追踪某个命令执行特定系统函数的累计次数:
1$ strace ./a.out 2>&1 | grep read | pv -l | wc -l # 累计调用read函数的次数