int main() { int i = 0; const char *err; while (1) { if (!mem_info(&err)) fprintf(stderr, "Mem info failed: %s\n", err); if (!cpu_info(&err)) fprintf(stderr, "CPU info failed: %s\n", err); if (!read_procs(&err)) fprintf(stderr, "Process info failed: %s\n", err); printf("%d\n", i++); usleep(50000); } }
int top_main(int argc, char *argv[]) { int i; num_used_procs = num_free_procs = 0; max_procs = 0; delay = 3; iterations = -1; proc_cmp = &proc_cpu_cmp; for (i = 1; i < argc; i++) { if (!strcmp(argv[i], "-m")) { if (i + 1 >= argc) { fprintf(stderr, "Option -m expects an argument.\n"); usage(argv[0]); exit(EXIT_FAILURE); } max_procs = atoi(argv[++i]); continue; } if (!strcmp(argv[i], "-n")) { if (i + 1 >= argc) { fprintf(stderr, "Option -n expects an argument.\n"); usage(argv[0]); exit(EXIT_FAILURE); } iterations = atoi(argv[++i]); continue; } if (!strcmp(argv[i], "-d")) { if (i + 1 >= argc) { fprintf(stderr, "Option -d expects an argument.\n"); usage(argv[0]); exit(EXIT_FAILURE); } delay = atoi(argv[++i]); continue; } if (!strcmp(argv[i], "-s")) { if (i + 1 >= argc) { fprintf(stderr, "Option -s expects an argument.\n"); usage(argv[0]); exit(EXIT_FAILURE); } ++i; if (!strcmp(argv[i], "cpu")) { proc_cmp = &proc_cpu_cmp; continue; } if (!strcmp(argv[i], "vss")) { proc_cmp = &proc_vss_cmp; continue; } if (!strcmp(argv[i], "rss")) { proc_cmp = &proc_rss_cmp; continue; } if (!strcmp(argv[i], "thr")) { proc_cmp = &proc_thr_cmp; continue; } fprintf(stderr, "Invalid argument \"%s\" for option -s.\n", argv[i]); exit(EXIT_FAILURE); } if (!strcmp(argv[i], "-t")) { threads = 1; continue; } if (!strcmp(argv[i], "-h")) { usage(argv[0]); exit(EXIT_SUCCESS); } fprintf(stderr, "Invalid argument \"%s\".\n", argv[i]); usage(argv[0]); exit(EXIT_FAILURE); } if (threads && proc_cmp == &proc_thr_cmp) { fprintf(stderr, "Sorting by threads per thread makes no sense!\n"); exit(EXIT_FAILURE); } free_procs = NULL; num_new_procs = num_old_procs = 0; new_procs = old_procs = NULL; read_procs(); while ((iterations == -1) || (iterations-- > 0)) { old_procs = new_procs; num_old_procs = num_new_procs; memcpy(&old_cpu, &new_cpu, sizeof(old_cpu)); sleep(delay); read_procs(); print_procs(); free_old_procs(); } return 0; }