int org_err;
int org_out;
+ struct sigaction orig_sigchld;
struct sigaction orig_sigint;
struct sigaction orig_sighup;
struct sigaction orig_sigterm;
pager_process.argv = pager_argv;
pager_process.in = -1;
+ memset(&sa, 0, sizeof(sa));
+ sa.sa_handler = SIG_DFL;
+
+ /* this makes sure that waitpid works as expected */
+ sigaction(SIGCHLD, &sa, &pager_process.orig_sigchld);
+
if (start_command(&pager_process))
return;
}
close(pager_process.in);
- memset(&sa, 0, sizeof(sa));
sa.sa_handler = wait_for_pager_signal;
/* this makes sure that the parent terminates after the pager */
close(pager_process.org_err);
/* restore original signal settings */
+ sigaction(SIGCHLD, &pager_process.orig_sigchld, NULL);
sigaction(SIGINT, &pager_process.orig_sigint, NULL);
sigaction(SIGHUP, &pager_process.orig_sighup, NULL);
sigaction(SIGTERM, &pager_process.orig_sigterm, NULL);