• Namhyung Kim's avatar
    perf record: Propagate exit status of a command line workload · 45604710
    Namhyung Kim authored
    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: default avatarStephane Eranian <eranian@google.com>
    Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
    Acked-by: default avatarStephane Eranian <eranian@google.com>
    Acked-by: default avatarPeter Zijlstra <a.p.zijlstra@chello.nl>
    Acked-by: default avatarIngo Molnar <mingo@kernel.org>
    Link: http://lkml.kernel.org/r/1399855645-25815-1-git-send-email-namhyung@kernel.orgSigned-off-by: default avatarJiri Olsa <jolsa@kernel.org>
    45604710
builtin-record.c 24.9 KB