linux/tools
Namhyung Kim 4560471053 perf record: Propagate exit status of a command line workload
Currently perf record doesn't propagate the exit status of a workload
given by the command line.  But sometimes it'd useful if it's
propagated so that a monitoring script can handle errors
appropriately.

To do that, it moves most of logic out of the exit handlers and run
them directly in the __cmd_record().  The only thing needs to be done
in the handler is propagating terminating signal so that the shell can
terminate its loop properly when Ctrl-C was pressed.  Also it cleaned
up the resource management code in record__exit().

With this change, perf record returns the child exit status in case of
normal termination and send signal to itself when terminated by signal.

Example run of Stephane's case:

  $ perf record true && echo yes || echo no
  [ perf record: Woken up 1 times to write data ]
  [ perf record: Captured and wrote 0.013 MB perf.data (~589 samples) ]
  yes

  $ perf record false && echo yes || echo no
  [ perf record: Woken up 1 times to write data ]
  [ perf record: Captured and wrote 0.013 MB perf.data (~589 samples) ]
  no

Jiri's case (error in parent):

  $ perf record -m 10G true && echo yes || echo no
  rounding mmap pages size to 17179869184 bytes (4194304 pages)
  failed to mmap with 12 (Cannot allocate memory)
  no

  $ ulimit -n 6
  $ perf record sleep 1 && echo yes || echo no
  failed to create 'go' pipe: Too many open files
  Couldn't run the workload!
  no

And Peter's case (interrupted by signal):

  $ while :; do perf record sleep 1; done
  ^C[ perf record: Woken up 1 times to write data ]
  [ perf record: Captured and wrote 0.014 MB perf.data (~593 samples) ]

Reported-by: Stephane Eranian <eranian@google.com>
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
Acked-by: Stephane Eranian <eranian@google.com>
Acked-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Acked-by: Ingo Molnar <mingo@kernel.org>
Link: http://lkml.kernel.org/r/1399855645-25815-1-git-send-email-namhyung@kernel.org
Signed-off-by: Jiri Olsa <jolsa@kernel.org>
2014-05-12 11:09:49 +02:00
..
cgroup cgroups: fix cgroup_event_listener error handling 2013-01-08 10:00:44 -08:00
firewire tools/firewire: nosy-dump: check for allocation failure 2012-12-02 20:10:18 +01:00
hv Tools: hv: Handle the case when the target file exists correctly 2014-04-16 14:10:36 -07:00
include perf tools: Move ACCESS_ONCE from perf.h header 2014-05-05 17:49:07 +02:00
lguest tools/lguest: offer VIRTIO_F_ANY_LAYOUT for net device. 2013-07-15 11:18:32 +09:30
lib tools: Consolidate types.h 2014-05-01 21:22:39 +02:00
net Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2014-03-14 22:31:55 -04:00
nfsd
perf perf record: Propagate exit status of a command line workload 2014-05-12 11:09:49 +02:00
power tools/power turbostat: Run on Broadwell 2014-03-05 22:20:02 -05:00
scripts tools lib traceevent: Add global QUIET_CC_FPIC build output 2013-12-19 16:18:10 -03:00
testing This just contains a single update by Satoru Takeuchi, which adds 2014-04-04 21:27:43 -07:00
thermal/tmon tools/thermal: Introduce tmon, a tool for thermal subsystem 2013-11-07 08:45:34 +08:00
usb usb: tools: fix a regression issue that gcc can't link to pthread 2013-12-04 15:10:54 -08:00
virtio tools: Consolidate types.h 2014-05-01 21:22:39 +02:00
vm tools/vm/page-types.c: page-cache sniffing feature 2014-04-07 16:35:52 -07:00
Makefile Adding makefile for tools/hv 2014-02-15 11:52:35 -08:00