Loading toolbox/toolbox.c +15 −0 Original line number Diff line number Diff line #include <signal.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> int main(int, char **); Loading Loading @@ -31,11 +33,24 @@ static struct { 0, 0 }, }; static void SIGPIPE_handler(int signal) { // Those desktop Linux tools that catch SIGPIPE seem to agree that it's // a successful way to exit, not a failure. (Which makes sense --- we were // told to stop by a reader, rather than failing to continue ourselves.) _exit(0); } int main(int argc, char **argv) { int i; char *name = argv[0]; // Let's assume that none of this code handles broken pipes. At least ls, // ps, and top were broken (though I'd previously added this fix locally // to top). We exit rather than use SIG_IGN because tools like top will // just keep on writing to nowhere forever if we don't stop them. signal(SIGPIPE, SIGPIPE_handler); if((argc > 1) && (argv[1][0] == '@')) { name = argv[1] + 1; argc--; Loading toolbox/top.c +0 −6 Original line number Diff line number Diff line Loading @@ -109,15 +109,9 @@ static int proc_thr_cmp(const void *a, const void *b); static int numcmp(long long a, long long b); static void usage(char *cmd); static void exit_top(int signal) { exit(EXIT_FAILURE); } int top_main(int argc, char *argv[]) { num_used_procs = num_free_procs = 0; signal(SIGPIPE, exit_top); max_procs = 0; delay = 3; iterations = -1; Loading Loading
toolbox/toolbox.c +15 −0 Original line number Diff line number Diff line #include <signal.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> int main(int, char **); Loading Loading @@ -31,11 +33,24 @@ static struct { 0, 0 }, }; static void SIGPIPE_handler(int signal) { // Those desktop Linux tools that catch SIGPIPE seem to agree that it's // a successful way to exit, not a failure. (Which makes sense --- we were // told to stop by a reader, rather than failing to continue ourselves.) _exit(0); } int main(int argc, char **argv) { int i; char *name = argv[0]; // Let's assume that none of this code handles broken pipes. At least ls, // ps, and top were broken (though I'd previously added this fix locally // to top). We exit rather than use SIG_IGN because tools like top will // just keep on writing to nowhere forever if we don't stop them. signal(SIGPIPE, SIGPIPE_handler); if((argc > 1) && (argv[1][0] == '@')) { name = argv[1] + 1; argc--; Loading
toolbox/top.c +0 −6 Original line number Diff line number Diff line Loading @@ -109,15 +109,9 @@ static int proc_thr_cmp(const void *a, const void *b); static int numcmp(long long a, long long b); static void usage(char *cmd); static void exit_top(int signal) { exit(EXIT_FAILURE); } int top_main(int argc, char *argv[]) { num_used_procs = num_free_procs = 0; signal(SIGPIPE, exit_top); max_procs = 0; delay = 3; iterations = -1; Loading