summaryrefslogtreecommitdiffstats
path: root/usr.bin/truss/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr.bin/truss/main.c')
-rw-r--r--usr.bin/truss/main.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/usr.bin/truss/main.c b/usr.bin/truss/main.c
index d6a1edc..cb97293 100644
--- a/usr.bin/truss/main.c
+++ b/usr.bin/truss/main.c
@@ -163,6 +163,7 @@ strsig(int sig)
int
main(int ac, char **av)
{
+ struct sigaction sa;
struct ex_types *funcs;
struct trussinfo *trussinfo;
char *fname;
@@ -257,10 +258,13 @@ main(int ac, char **av)
signal(SIGTERM, SIG_IGN);
signal(SIGQUIT, SIG_IGN);
} else {
+ sa.sa_handler = restore_proc;
+ sa.sa_flags = 0;
+ sigemptyset(&sa.sa_mask);
+ sigaction(SIGINT, &sa, NULL);
+ sigaction(SIGQUIT, &sa, NULL);
+ sigaction(SIGTERM, &sa, NULL);
start_tracing(trussinfo->pid);
- signal(SIGINT, restore_proc);
- signal(SIGTERM, restore_proc);
- signal(SIGQUIT, restore_proc);
}
@@ -366,7 +370,8 @@ START_TRACE:
default:
break;
}
- } while (trussinfo->pr_why != S_EXIT);
+ } while (trussinfo->pr_why != S_EXIT &&
+ trussinfo->pr_why != S_DETACHED);
if (trussinfo->flags & FOLLOWFORKS) {
do {
OpenPOWER on IntegriCloud