Dora在Linux中的系统调用分析

Dora是一个面向数据流的机器人应用框架,使用Rust语言开发。让机器人应用变得快速而简单。

查看官网

x86_64 Linux 中的系统调用分析

dora-rs cli client

Usage: dora <COMMAND>

Commands:
  check        Check if the coordinator and the daemon is running
  graph        Generate a visualization of the given graph using mermaid.js.
                   Use --open to open browser
  build        Run build commands provided in the given dataflow
  new          Generate a new project, node or operator. Choose the language
                   between Rust, Python, C or C++
  up           Spawn a coordinator and a daemon
  destroy      Destroy running coordinator and daemon. If some dataflows are
                   still running, they will be stopped first
  start        Start the given dataflow path. Attach a name to the running
                   dataflow by using --name
  stop         Stop the given dataflow UUID. If no id is provided, you will
                   be able to choose between the running dataflows
  list         List running dataflows
  logs         Show logs of a given dataflow and node
  daemon       Run daemon
  runtime      Run runtime
  coordinator  Run coordinator
  help         Print this message or the help of the given subcommand(s)

Options:
  -h, --help     Print help
  -V, --version  Print version
% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ------------------
  0.00    0.000000           0         7           read
  0.00    0.000000           0         1           write
  0.00    0.000000           0         5           close
  0.00    0.000000           0         1           poll
  0.00    0.000000           0        17           mmap
  0.00    0.000000           0         7           mprotect
  0.00    0.000000           0         2           munmap
  0.00    0.000000           0         3           brk
  0.00    0.000000           0         5           rt_sigaction
  0.00    0.000000           0         5         1 ioctl
  0.00    0.000000           0         4           pread64
  0.00    0.000000           0         1         1 access
  0.00    0.000000           0         1           execve
  0.00    0.000000           0         3           sigaltstack
  0.00    0.000000           0         2         1 arch_prctl
  0.00    0.000000           0         1           sched_getaffinity
  0.00    0.000000           0         1           set_tid_address
  0.00    0.000000           0         5           openat
  0.00    0.000000           0         5           newfstatat
  0.00    0.000000           0         1           set_robust_list
  0.00    0.000000           0         2           prlimit64
  0.00    0.000000           0         1           getrandom
  0.00    0.000000           0         1           rseq
------ ----------- ----------- --------- --------- ------------------
100.00    0.000000           0        81         3 total
$ strace -f -v dora -h
execve("/home/echo/Dev/dora/target/release/dora", ["/home/echo/Dev/dora/target/relea"..., "-h"], ["SHELL=/bin/bash", "CONDA_EXE=/home/echo/miniconda3/"..., "_CE_M=", "LANGUAGE=zh_CN:zh", "PWD=/home/echo", "LOGNAME=echo", "XDG_SESSION_TYPE=tty", "CONDA_PREFIX=/home/echo/minicond"..., "MOTD_SHOWN=pam", "HOME=/home/echo", "LANG=C.UTF-8", "LS_COLORS=rs=0:di=01;34:ln=01;36"..., "CONDA_PROMPT_MODIFIER=(base) ", "SSH_CONNECTION=172.16.203.10 493"..., "LESSCLOSE=/usr/bin/lesspipe %s %"..., "XDG_SESSION_CLASS=user", "TERM=xterm-256color", "_CE_CONDA=", "LESSOPEN=| /usr/bin/lesspipe %s", "USER=echo", "CONDA_SHLVL=1", "SHLVL=1", "XDG_SESSION_ID=4", "CONDA_PYTHON_EXE=/home/echo/mini"..., "LC_CTYPE=C.UTF-8", "XDG_RUNTIME_DIR=/run/user/1000", "SSH_CLIENT=172.16.203.10 49374 2"..., "CONDA_DEFAULT_ENV=base", "XDG_DATA_DIRS=/usr/share/gnome:/"..., "PATH=/home/echo/miniconda3/bin:/"..., "DBUS_SESSION_BUS_ADDRESS=unix:pa"..., "SSH_TTY=/dev/pts/2", "TERM_PROGRAM=WarpTerminal", "_=/usr/bin/strace"]) = 0
brk(NULL)                               = 0x55b1f9020000
arch_prctl(0x3001 /* ARCH_??? */, 0x7ffee484d3c0) = -1 EINVAL (无效的参数)
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7bcf735db000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (没有那个文件或目录)
openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
newfstatat(3, "", {st_dev=makedev(0x8, 0x3), st_ino=19176588, st_mode=S_IFREG|0644, st_nlink=1, st_uid=0, st_gid=0, st_blksize=4096, st_blocks=128, st_size=62119, st_atime=1719544210 /* 2024-06-28T11:10:10.669757705+0800 */, st_atime_nsec=669757705, st_mtime=1719544210 /* 2024-06-28T11:10:10.645757704+0800 */, st_mtime_nsec=645757704, st_ctime=1719544210 /* 2024-06-28T11:10:10.649757704+0800 */, st_ctime_nsec=649757704}, AT_EMPTY_PATH) = 0
mmap(NULL, 62119, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7bcf735cb000
close(3)                                = 0
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libgcc_s.so.1", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\0\0\0\0\0\0\0\0"..., 832) = 832
newfstatat(3, "", {st_dev=makedev(0x8, 0x3), st_ino=2214, st_mode=S_IFREG|0644, st_nlink=1, st_uid=0, st_gid=0, st_blksize=4096, st_blocks=248, st_size=125488, st_atime=1719476439 /* 2024-06-27T16:20:39.642014627+0800 */, st_atime_nsec=642014627, st_mtime=1683963205 /* 2023-05-13T15:33:25+0800 */, st_mtime_nsec=0, st_ctime=1718364975 /* 2024-06-14T19:36:15.293760191+0800 */, st_ctime_nsec=293760191}, AT_EMPTY_PATH) = 0
mmap(NULL, 127720, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7bcf735ab000
mmap(0x7bcf735ae000, 94208, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x3000) = 0x7bcf735ae000
mmap(0x7bcf735c5000, 16384, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1a000) = 0x7bcf735c5000
mmap(0x7bcf735c9000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1d000) = 0x7bcf735c9000
close(3)                                = 0
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libm.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\0\0\0\0\0\0\0\0"..., 832) = 832
newfstatat(3, "", {st_dev=makedev(0x8, 0x3), st_ino=7202, st_mode=S_IFREG|0644, st_nlink=1, st_uid=0, st_gid=0, st_blksize=4096, st_blocks=1840, st_size=940560, st_atime=1719469836 /* 2024-06-27T14:30:36.397596395+0800 */, st_atime_nsec=397596395, st_mtime=1715027668 /* 2024-05-07T04:34:28+0800 */, st_mtime_nsec=0, st_ctime=1718364975 /* 2024-06-14T19:36:15.982167719+0800 */, st_ctime_nsec=982167719}, AT_EMPTY_PATH) = 0
mmap(NULL, 942344, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7bcf734c4000
mmap(0x7bcf734d2000, 507904, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0xe000) = 0x7bcf734d2000
mmap(0x7bcf7354e000, 372736, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x8a000) = 0x7bcf7354e000
mmap(0x7bcf735a9000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0xe4000) = 0x7bcf735a9000
close(3)                                = 0
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0P\237\2\0\0\0\0\0"..., 832) = 832
pread64(3, "\6\0\0\0\4\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0"..., 784, 64) = 784
pread64(3, "\4\0\0\0 \0\0\0\5\0\0\0GNU\0\2\0\0\300\4\0\0\0\3\0\0\0\0\0\0\0"..., 48, 848) = 48
pread64(3, "\4\0\0\0\24\0\0\0\3\0\0\0GNU\0I\17\357\204\3$\f\221\2039x\324\224\323\236S"..., 68, 896) = 68
newfstatat(3, "", {st_dev=makedev(0x8, 0x3), st_ino=2727, st_mode=S_IFREG|0755, st_nlink=1, st_uid=0, st_gid=0, st_blksize=4096, st_blocks=4344, st_size=2220400, st_atime=1719461821 /* 2024-06-27T12:17:01.796767217+0800 */, st_atime_nsec=796767217, st_mtime=1715027668 /* 2024-05-07T04:34:28+0800 */, st_mtime_nsec=0, st_ctime=1718364975 /* 2024-06-14T19:36:15.982167719+0800 */, st_ctime_nsec=982167719}, AT_EMPTY_PATH) = 0
pread64(3, "\6\0\0\0\4\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0"..., 784, 64) = 784
mmap(NULL, 2264656, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7bcf73200000
mprotect(0x7bcf73228000, 2023424, PROT_NONE) = 0
mmap(0x7bcf73228000, 1658880, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x28000) = 0x7bcf73228000
mmap(0x7bcf733bd000, 360448, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1bd000) = 0x7bcf733bd000
mmap(0x7bcf73416000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x215000) = 0x7bcf73416000
mmap(0x7bcf7341c000, 52816, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7bcf7341c000
close(3)                                = 0
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7bcf734c2000
arch_prctl(ARCH_SET_FS, 0x7bcf734c2f40) = 0
set_tid_address(0x7bcf734c3210)         = 4271
set_robust_list(0x7bcf734c3220, 24)     = 0
rseq(0x7bcf734c38e0, 0x20, 0, 0x53053053) = 0
mprotect(0x7bcf73416000, 16384, PROT_READ) = 0
mprotect(0x7bcf735a9000, 4096, PROT_READ) = 0
mprotect(0x7bcf735c9000, 4096, PROT_READ) = 0
mprotect(0x55b1f821a000, 991232, PROT_READ) = 0
mprotect(0x7bcf73615000, 8192, PROT_READ) = 0
prlimit64(0, RLIMIT_STACK, NULL, {rlim_cur=8192*1024, rlim_max=RLIM64_INFINITY}) = 0
munmap(0x7bcf735cb000, 62119)           = 0
poll([{fd=0, events=0}, {fd=1, events=0}, {fd=2, events=0}], 3, 0) = 0 (Timeout)
rt_sigaction(SIGPIPE, {sa_handler=SIG_IGN, sa_mask=[PIPE], sa_flags=SA_RESTORER|SA_RESTART, sa_restorer=0x7bcf73242520}, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGSEGV, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGSEGV, {sa_handler=0x55b1f7c33f30, sa_mask=[], sa_flags=SA_RESTORER|SA_ONSTACK|SA_SIGINFO, sa_restorer=0x7bcf73242520}, NULL, 8) = 0
rt_sigaction(SIGBUS, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGBUS, {sa_handler=0x55b1f7c33f30, sa_mask=[], sa_flags=SA_RESTORER|SA_ONSTACK|SA_SIGINFO, sa_restorer=0x7bcf73242520}, NULL, 8) = 0
sigaltstack(NULL, {ss_sp=NULL, ss_flags=SS_DISABLE, ss_size=0}) = 0
mmap(NULL, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_STACK, -1, 0) = 0x7bcf735d8000
mprotect(0x7bcf735d8000, 4096, PROT_NONE) = 0
sigaltstack({ss_sp=0x7bcf735d9000, ss_flags=0, ss_size=8192}, NULL) = 0
getrandom("\xd2\x86\xbe\x67\x6f\x87\x31\x6e", 8, GRND_NONBLOCK) = 8
brk(NULL)                               = 0x55b1f9020000
brk(0x55b1f9041000)                     = 0x55b1f9041000
openat(AT_FDCWD, "/proc/self/maps", O_RDONLY|O_CLOEXEC) = 3
prlimit64(0, RLIMIT_STACK, NULL, {rlim_cur=8192*1024, rlim_max=RLIM64_INFINITY}) = 0
newfstatat(3, "", {st_dev=makedev(0, 0x16), st_ino=49288, st_mode=S_IFREG|0444, st_nlink=1, st_uid=1000, st_gid=1000, st_blksize=1024, st_blocks=0, st_size=0, st_atime=1719544658 /* 2024-06-28T11:17:38.901251488+0800 */, st_atime_nsec=901251488, st_mtime=1719544658 /* 2024-06-28T11:17:38.901251488+0800 */, st_mtime_nsec=901251488, st_ctime=1719544658 /* 2024-06-28T11:17:38.901251488+0800 */, st_ctime_nsec=901251488}, AT_EMPTY_PATH) = 0
read(3, "55b1f6e22000-55b1f6f82000 r--p 0"..., 1024) = 1024
read(3, "f73415000-7bcf73416000 ---p 0021"..., 1024) = 1024
read(3, "                /usr/lib/x86_64-"..., 1024) = 1024
read(3, "               /usr/lib/x86_64-l"..., 1024) = 507
close(3)                                = 0
sched_getaffinity(4271, 32, [0, 1, 2, 3]) = 8
ioctl(1, TIOCGWINSZ, {ws_row=29, ws_col=86, ws_xpixel=991, ws_ypixel=691}) = 0
ioctl(1, TIOCGWINSZ, {ws_row=29, ws_col=86, ws_xpixel=991, ws_ypixel=691}) = 0
ioctl(1, TCGETS, {c_iflags=0x2102, c_oflags=0x5, c_cflags=0xbd, c_lflags=0xca3b, c_line=0, c_cc="\x03\x1c\x7f\x15\x04\x00\x01\x00\x11\x13\x1a\x00\x12\x0f\x17\x16\x00\x00\x00"}) = 0
ioctl(1, TCGETS, {c_iflags=0x2102, c_oflags=0x5, c_cflags=0xbd, c_lflags=0xca3b, c_line=0, c_cc="\x03\x1c\x7f\x15\x04\x00\x01\x00\x11\x13\x1a\x00\x12\x0f\x17\x16\x00\x00\x00"}) = 0
write(1, "dora-rs cli client\n\n\33[1m\33[4mUsag"..., 1388dora-rs cli client

Usage: dora <COMMAND>

Commands:
  check        Check if the coordinator and the daemon is running
  graph        Generate a visualization of the given graph using mermaid.js. Use
                   --open to open browser
  build        Run build commands provided in the given dataflow
  new          Generate a new project, node or operator. Choose the language
                   between Rust, Python, C or C++
  up           Spawn a coordinator and a daemon
  destroy      Destroy running coordinator and daemon. If some dataflows are still
                   running, they will be stopped first
  start        Start the given dataflow path. Attach a name to the running
                   dataflow by using --name
  stop         Stop the given dataflow UUID. If no id is provided, you will be
                   able to choose between the running dataflows
  list         List running dataflows
  logs         Show logs of a given dataflow and node
  daemon       Run daemon
  runtime      Run runtime
  coordinator  Run coordinator
  help         Print this message or the help of the given subcommand(s)

Options:
  -h, --help     Print help
  -V, --version  Print version
) = 1388
sigaltstack({ss_sp=NULL, ss_flags=SS_DISABLE, ss_size=8192}, NULL) = 0
munmap(0x7bcf735d8000, 12288)           = 0
exit_group(0)                           = ?
+++ exited with 0 +++