Hi tech@, Maybe it is need to check sysctl return value in usr.bin/systat/pigs.c. E.g., in read_pg() function:
...... size = sizeof(ctimes); sysctl(cp_time_mib, 2, &ctimes, &size, NULL, 0); t = 0; for (i = 0; i < CPUSTATES; i++) t += ctimes[i] - stime[i]; ...... If sysctl() failed, the values in ctimes are indeterminate. Apologize if I am wrong. Thanks! Index: pigs.c =================================================================== RCS file: /cvs/src/usr.bin/systat/pigs.c,v retrieving revision 1.30 diff -u -p -r1.30 pigs.c --- pigs.c 12 Sep 2015 15:59:36 -0000 1.30 +++ pigs.c 4 May 2018 05:14:13 -0000 @@ -183,7 +183,8 @@ read_pg(void) * and for the imaginary "idle" process */ size = sizeof(ctimes); - sysctl(cp_time_mib, 2, &ctimes, &size, NULL, 0); + if (sysctl(cp_time_mib, 2, &ctimes, &size, NULL, 0) < 0) + return 1; t = 0; for (i = 0; i < CPUSTATES; i++) @@ -234,13 +235,16 @@ initpigs(void) fixpt_t ccpu; size = sizeof(stime); - sysctl(cp_time_mib, 2, &stime, &size, NULL, 0); + if (sysctl(cp_time_mib, 2, &stime, &size, NULL, 0) < 0) + return (-1); size = sizeof(sysload); - sysctl(sysload_mib, 2, &sysload, &size, NULL, 0); + if (sysctl(sysload_mib, 2, &sysload, &size, NULL, 0) < 0) + return (-1); size = sizeof(ccpu); - sysctl(ccpu_mib, 2, &ccpu, &size, NULL, 0); + if (sysctl(ccpu_mib, 2, &ccpu, &size, NULL, 0) < 0) + return (-1); lccpu = log((double) ccpu / sysload.fscale); -- Best Regards Nan Xiao