perf record: Fix eternal wait for stillborn child
When execvp fails to find the specified command on the path we won't get SIGCHLD, so send a SIGUSR1 and exit right away. Current situation would require a SIGINT performed by the user and would produce meaningless summary. Now: [acme@emilia linux]$ ./foo -bash: ./foo: No such file or directory [acme@emilia linux]$ perf record ./foo ./foo: No such file or directory [acme@emilia linux]$ Acked-by: Thomas Gleixner <tglx@linutronix.de> Cc: Frederic Weisbecker <fweisbec@gmail.com> Cc: Ingo Molnar <mingo@elte.hu> Cc: Mike Galbraith <efault@gmx.de> Cc: Paul Mackerras <paulus@samba.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Stephane Eranian <eranian@google.com> Cc: Tom Zanussi <tzanussi@gmail.com> Cc: Thomas Gleixner <tglx@linutronix.de> LKML-Reference: <new-submission> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
Родитель
60e677373b
Коммит
18483b81ee
|
@ -197,7 +197,7 @@ static void sig_atexit(void)
|
|||
if (child_pid > 0)
|
||||
kill(child_pid, SIGTERM);
|
||||
|
||||
if (signr == -1)
|
||||
if (signr == -1 || signr == SIGUSR1)
|
||||
return;
|
||||
|
||||
signal(signr, SIG_DFL);
|
||||
|
@ -515,6 +515,7 @@ static int __cmd_record(int argc, const char **argv)
|
|||
atexit(sig_atexit);
|
||||
signal(SIGCHLD, sig_handler);
|
||||
signal(SIGINT, sig_handler);
|
||||
signal(SIGUSR1, sig_handler);
|
||||
|
||||
if (forks && (pipe(child_ready_pipe) < 0 || pipe(go_pipe) < 0)) {
|
||||
perror("failed to create pipes");
|
||||
|
@ -606,6 +607,7 @@ static int __cmd_record(int argc, const char **argv)
|
|||
execvp(argv[0], (char **)argv);
|
||||
|
||||
perror(argv[0]);
|
||||
kill(getppid(), SIGUSR1);
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
|
@ -762,7 +764,7 @@ static int __cmd_record(int argc, const char **argv)
|
|||
}
|
||||
}
|
||||
|
||||
if (quiet)
|
||||
if (quiet || signr == SIGUSR1)
|
||||
return 0;
|
||||
|
||||
fprintf(stderr, "[ perf record: Woken up %ld times to write data ]\n", waking);
|
||||
|
|
Загрузка…
Ссылка в новой задаче