| sample(1) | General Commands Manual | sample(1) | 
sample — Profile a
    process during a time interval
sample | 
    pid |
      partial-executable-name [duration
      [samplingInterval]] [-wait]
      [-mayDie] [-fullPaths]
      [-e] [-file
      filename] | 
  
sample is a command-line tool for
    gathering data about the running behavior of a process. It suspends the
    process at specified intervals (by default, every 1 millisecond), records
    the call stacks of all threads in the process at that time, then resumes the
    process. The analysis done by sample is called
    ``sampling'' because it only checks the state of the program at the sampling
    points. The analysis may miss execution of some functions that are not
    executing during one of the samples, but sample
    still provides useful data about commonly executing functions.
At the end of the sampling duration,
    sample produces a report showing which functions
    were executing during the sampling. The data is condensed into a call tree,
    showing the functions seen on the stack and how they were called. (This tree
    is a subset of the actual call tree for the execution, since some functions
    may not have been executing during any of the sampling events.) The tree is
    displayed textually, with called functions indented one level to the right
    of the callee.
In the call tree, if a function calls more than one function then a vertical line is printed to visually connect those separate children functions, making it easier to see which functions are at the same level. The characters used to draw those lines, such as + | : ! are arbitrary and have no specific meaning.
The user of sample specifies a target process (either by process id, or by name), the duration of the sampling run (in seconds), and a sampling rate (in milliseconds).
If the sampling duration is not specified, a default of 10 seconds is used. Longer sampling durations provide better data by collecting more samples, but could also be confusing if the target process performs many different types of operations during that period.
The default sampling rate is 1 millisecond. Fast sampling rates provide more samples and a better chance to capture all the functions that are executing.
-wait tells sample to wait for the process
    specified (usually as a partial name or hint) to exist, then start sampling
    that process. This option allows you to sample from an application's
  launch.
-mayDie tells sample to immediately grab
    the location of symbols from the application, on the assumption that the
    application may exit or crash at any point during the sampling. This ensures
    that sample can give information about the call stacks even if the process
    no longer exists.
-fullPaths tells sample to show the full
    path to the source code (rather than just the file name) for any symbol in a
    binary image for which debug information is available. The full path was the
    path to the source code when the binary image was built.
-e tells sample to open the output in
    TextEdit automatically when sampling completes.
-file filename tells
    sample the full path to where the output should be written. If this flag is
    not specified, results are written to a file in /tmp called <application
    name>_<date>_<time>.<XXXX>.sample.txt, where each 'X'
    is replaced by a random alphanumeric character.
If neither the -e nor
    -file flags are given, the output gets written to
    stdout as well as saved to the file in /tmp.
filtercalltree(1), spindump(8)
The Xcode developer tools also include Instruments, a graphical
    application that can give information similar to that provided by
    sample. The Time Profiler instrument graphically
    displays dynamic, real-time CPU sampling information.
| Mar. 16, 2013 | macOS 15.6 |