Coder Social home page Coder Social logo

tracetree's Introduction

Build Status crates.io

tracetree

Run a process, ptrace'ing it and all of its children, and print the entire process tree at the end.

Currently only Linux support is implemented.

Examples

Print a process tree in text format to stdout:

$ tracetree /bin/bash -c '/bin/sleep 1; /bin/sleep 1'
16665 bash -c /bin/sleep 1; /bin/sleep 1 [2.004s]
	16666 sleep 1 [1.001s]
	16667 sleep 1 [1.000s]

Print a process tree in JSON format to output.json:

$ tracetree -f json -o output.json /bin/bash -c '/bin/sleep 1; /bin/sleep 1'
$ python -mjson.tool output.json
{
    "children": [
        {
            "children": [],
            "cmdline": [
                "/bin/sleep",
                "1"
            ],
            "ended": "2017-06-22T06:28:58.960384212-04:00",
            "pid": 16727,
            "started": "2017-06-22T06:28:57.959636824-04:00"
        },
        {
            "children": [],
            "cmdline": [
                "/bin/sleep",
                "1"
            ],
            "ended": "2017-06-22T06:28:59.961990469-04:00",
            "pid": 16728,
            "started": "2017-06-22T06:28:58.960849779-04:00"
        }
    ],
    "cmdline": [
        "/bin/bash",
        "-c",
        "/bin/sleep 1; /bin/sleep 1"
    ],
    "ended": "2017-06-22T06:28:59.962407641-04:00",
    "pid": 16726,
    "started": "2017-06-22T06:28:57.958836370-04:00"
}

JSON output can be viewed with this web visualizer: The web viewer displaying the JSON output from the previous command

tracetree's People

Contributors

luser avatar brandonedens avatar

Stargazers

Teddy Xinyuan Chen avatar Marco Matthies avatar t avatar  avatar Song avatar ❂ avatar Benjamin Rombaut avatar RandomOS avatar  avatar Jakub Žádník avatar Kesavan Yogeswaran avatar Noah Pendleton avatar Alan Rosenthal avatar Jeff Carpenter avatar  avatar Jakob Wedemeyer avatar  avatar  avatar Sandeepin avatar Bernhard Schuster avatar GAURAV avatar Hank Bao avatar Scott Ivey avatar Francisco avatar Bet4 avatar Andrew Prentice avatar Shang Yuanchun avatar Andrew Donnellan avatar Teino Boswell avatar Andrejs Agejevs avatar Sander Mathijs van Veen avatar Anatoly Chernov avatar Lawrence Dark avatar Paul Daniel Faria avatar Henri Dubois avatar Daniel Drozdzewski avatar Sebastian Spieß avatar Chris A. avatar opensourcegeek avatar Antonin Carette avatar Clément Renault avatar Alexander Dukhno avatar Gonçalo Mendes Cabrita avatar Justin C. avatar  avatar Julian Pokrovsky avatar Andrew Sutherland avatar Brad Svercl avatar

Watchers

 avatar Daniel Drozdzewski avatar James Cloos avatar Anatoly Chernov avatar Chris Emerson avatar  avatar  avatar

tracetree's Issues

`thread 'main' panicked at 'Failed to spawn process: Error(Msg("Unexpected process status: Signaled(7771, SIGTERM, false)")`

thread 'main' panicked at 'Failed to spawn process: Error(Msg("Unexpected process status: Signaled(7771, SIGTERM, false)"), State { next_error: None, backtrace: Some(stack backtrace:
   0:     0x55fda50ef0fc - backtrace::backtrace::trace::h58bdbc4722aadbf4
   1:     0x55fda50ef242 - backtrace::capture::Backtrace::new::hde1afc496271e12d
   2:     0x55fda50ae0a6 - error_chain::make_backtrace::hb3affedfab149f41
   3:     0x55fda50ae158 - <error_chain::State as core::default::Default>::default::h0287c2899b6ba4bd
   4:     0x55fda50acbab - <tracetree::errors::Error as core::convert::From<collections::string::String>>::from::hd80ab8e5123d5b17
   5:     0x55fda501eaea - tracetree::ProcessTree::spawn::h318ee82efe85e77e
   6:     0x55fda5020160 - tracetree::main::h0c4d1b8d40bb9fd3
   7:     0x55fda511349a - panic_unwind::__rust_maybe_catch_panic
                        at /checkout/src/libpanic_unwind/lib.rs:98
   8:     0x55fda510ccf8 - std::panicking::try<(),closure>
                        at /checkout/src/libstd/panicking.rs:433
                         - std::panic::catch_unwind<closure,()>
                        at /checkout/src/libstd/panic.rs:361
                         - std::rt::lang_start
                        at /checkout/src/libstd/rt.rs:59
   9:     0x7fd72b3863f0 - __libc_start_main
  10:     0x55fda50175c9 - _start
  11:                0x0 - <unknown>) })', /checkout/src/libcore/result.rs:860
stack backtrace:
   0: std::sys::imp::backtrace::tracing::imp::unwind_backtrace
             at /checkout/src/libstd/sys/unix/backtrace/tracing/gcc_s.rs:49
   1: std::sys_common::backtrace::_print
             at /checkout/src/libstd/sys_common/backtrace.rs:71
   2: std::panicking::default_hook::{{closure}}
             at /checkout/src/libstd/sys_common/backtrace.rs:60
             at /checkout/src/libstd/panicking.rs:355
   3: std::panicking::default_hook
             at /checkout/src/libstd/panicking.rs:371
   4: std::panicking::rust_panic_with_hook
             at /checkout/src/libstd/panicking.rs:549
   5: std::panicking::begin_panic
             at /checkout/src/libstd/panicking.rs:511
   6: std::panicking::begin_panic_fmt
             at /checkout/src/libstd/panicking.rs:495
   7: rust_begin_unwind
             at /checkout/src/libstd/panicking.rs:471
   8: core::panicking::panic_fmt
             at /checkout/src/libcore/panicking.rs:69
   9: core::result::unwrap_failed
  10: tracetree::main
  11: __rust_maybe_catch_panic
             at /checkout/src/libpanic_unwind/lib.rs:98
  12: std::rt::lang_start
             at /checkout/src/libstd/panicking.rs:433
             at /checkout/src/libstd/panic.rs:361
             at /checkout/src/libstd/rt.rs:59
  13: __libc_start_main
  14: _start

This was tracetree ./mach wpt testing/web-platform/tests/compat although on a branch.

Add macOS support

It would be great to have macOS support. ptrace doesn't have the same options there, but I finally found the necessary APIs that should enable this.

Specifically, calling dispatch_source_create with DISPATCH_SOURCE_TYPE_PROC will provide events on fork/exec/exit, which should be sufficient for this tool's needs. Apple has some sample code, and there's also the LLDB source to look at, where I originally stumbled upon this.

Add Windows support

Windows provides an API to associate an IO completion port with a Job object, by calling SetInformationJobObject with JobObjectAssociateCompletionPortInformation and passing in a JOBOBJECT_ASSOCIATE_COMPLETION_PORT.

The MSDN docs say the notifications aren't reliable, but don't explain why and I can't find any evidence to support that. I think it's worth trying it out, in any event.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.