当前位置: 首页 > news >正文

134、【OS】【Nuttx】【周边】效果呈现方案解析:端口映射(三)

【声明】本博客所有内容均为个人业余时间创作,所述技术案例均来自公开开源项目(如Github,Apache基金会),不涉及任何企业机密或未公开技术,如有侵权请联系删除

背景

之前 blog
【OS】【Nuttx】【周边】效果呈现方案解析:端口映射(一)
【OS】【Nuttx】【周边】效果呈现方案解析:端口映射(二)
分析了 localhost 以及端口的基本概念,以及 VSCode 上端口自动转发的配置项,下面来看下另一个点:从远程服务器上打开本地的浏览器

之前的分析都是围绕在本地浏览器上输入 localhost:8000 ,通过端口自动转发功能,可以打开远程服务器上对应端口号的
在这里插入图片描述
下面来分析另一个点,在远程服务器上打开本地浏览器

端口映射

在这里插入图片描述
当执行到 65 行语句时,可以发现 Windows 上也神奇地打开了浏览器,并且网址是 http://localhost:8000,之前的分析都是在 Windows 浏览器上输入 http://localhost:8000,可以打开远程服务器上的网址,之前 blog 【OS】【Nuttx】【周边】效果呈现方案解析:端口映射(二) 也分析了其大致思路,其实是 VSCode 的端口自动转发功能,而下面分析的远程服务器打开本地浏览器的过程,本质上不属于端口自动转发的范畴,实际上属于 VSCode 和远程服务器交互的一部分,但分析思路是从端口映射过来的,先暂且归到这一类

首先回顾 xdg-open 这个命令
在这里插入图片描述
其作用可以简单概括为:用默认程序打开一个文件或网址,这里 xdg 的含义为 X Desktop Group,是统一 Linux 桌面标准的组织,也就是按桌面标准打开文件

ok,既然是 Linux 用来打开网址的命令,最后却调用了 Windows 的浏览器来打开网址,下面来分析下

可以用 strace 命令来追踪 xdg-open 命令的系统调用,在终端输入

strace -f -e trace=execve,openat,connect -o /tmp/strace.log xdg-open http://localhost:8000

接着在终端输入

xdg-open http://localhost:8000

可以看到 strace.log 日志如下

2715206 execve("/usr/bin/xdg-open", ["xdg-open", "http://localhost:8000"], 0x7ffcfc6022b0 /* 41 vars */) = 0
2715206 openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
2715206 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
2715206 openat(AT_FDCWD, "/usr/bin/xdg-open", O_RDONLY) = 3
2715207 openat(AT_FDCWD, "/dev/null", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 3
2715207 execve("/usr/bin/dbus-send", ["dbus-send", "--print-reply", "--dest=org.freedesktop.DBus", "/org/freedesktop/DBus", "org.freedesktop.DBus.GetNameOwne"..., "string:org.gnome.SessionManager"], 0x65422ee4ddd8 /* 41 vars */) = 0
2715207 openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
2715207 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libdbus-1.so.3", O_RDONLY|O_CLOEXEC) = 3
2715207 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
2715207 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libsystemd.so.0", O_RDONLY|O_CLOEXEC) = 3
2715207 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libcap.so.2", O_RDONLY|O_CLOEXEC) = 3
2715207 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libgcrypt.so.20", O_RDONLY|O_CLOEXEC) = 3
2715207 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/liblz4.so.1", O_RDONLY|O_CLOEXEC) = 3
2715207 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/liblzma.so.5", O_RDONLY|O_CLOEXEC) = 3
2715207 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libzstd.so.1", O_RDONLY|O_CLOEXEC) = 3
2715207 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libgpg-error.so.0", O_RDONLY|O_CLOEXEC) = 3
2715207 connect(3, {sa_family=AF_UNIX, sun_path="/run/user/1000/bus"}, 20) = 0
2715207 +++ exited with 1 +++
2715206 --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=2715207, si_uid=1000, si_status=1, si_utime=0, si_stime=0} ---
2715209 openat(AT_FDCWD, "/dev/null", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 3
2715209 execve("/usr/bin/xprop", ["xprop", "-root", "_DT_SAVE_MODE"], 0x65422ee4ddd8 /* 41 vars */ <unfinished ...>
2715210 openat(AT_FDCWD, "/dev/null", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 3
2715210 execve("/usr/bin/grep", ["grep", " = \\\"xfce4\\\"$"], 0x65422ee4ddd8 /* 41 vars */ <unfinished ...>
2715209 <... execve resumed>)           = 0
2715209 openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
2715209 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libX11.so.6", O_RDONLY|O_CLOEXEC) = 3
2715210 <... execve resumed>)           = 0
2715210 openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
2715209 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
2715210 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libpcre2-8.so.0", O_RDONLY|O_CLOEXEC) = 3
2715210 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
2715209 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libxcb.so.1", O_RDONLY|O_CLOEXEC) = 3
2715209 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libXau.so.6", O_RDONLY|O_CLOEXEC) = 3
2715209 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libXdmcp.so.6", O_RDONLY|O_CLOEXEC) = 3
2715210 openat(AT_FDCWD, "/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC <unfinished ...>
2715209 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libbsd.so.0", O_RDONLY|O_CLOEXEC <unfinished ...>
2715210 <... openat resumed>)           = 3
2715209 <... openat resumed>)           = 3
2715210 openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/gconv/gconv-modules.cache", O_RDONLY|O_CLOEXEC) = 3
2715209 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libmd.so.0", O_RDONLY|O_CLOEXEC <unfinished ...>
2715210 openat(AT_FDCWD, "/usr/share/locale/locale.alias", O_RDONLY|O_CLOEXEC <unfinished ...>
2715209 <... openat resumed>)           = 3
2715210 <... openat resumed>)           = 3
2715210 openat(AT_FDCWD, "/usr/share/locale/en_US.UTF-8/LC_MESSAGES/grep.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
2715210 openat(AT_FDCWD, "/usr/share/locale/en_US.utf8/LC_MESSAGES/grep.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
2715210 openat(AT_FDCWD, "/usr/share/locale/en_US/LC_MESSAGES/grep.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
2715210 openat(AT_FDCWD, "/usr/share/locale/en.UTF-8/LC_MESSAGES/grep.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
2715210 openat(AT_FDCWD, "/usr/share/locale/en.utf8/LC_MESSAGES/grep.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
2715210 openat(AT_FDCWD, "/usr/share/locale/en/LC_MESSAGES/grep.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
2715210 openat(AT_FDCWD, "/usr/share/locale-langpack/en_US.UTF-8/LC_MESSAGES/grep.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
2715210 openat(AT_FDCWD, "/usr/share/locale-langpack/en_US.utf8/LC_MESSAGES/grep.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
2715210 openat(AT_FDCWD, "/usr/share/locale-langpack/en_US/LC_MESSAGES/grep.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
2715210 openat(AT_FDCWD, "/usr/share/locale-langpack/en.UTF-8/LC_MESSAGES/grep.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
2715210 openat(AT_FDCWD, "/usr/share/locale-langpack/en.utf8/LC_MESSAGES/grep.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
2715210 openat(AT_FDCWD, "/usr/share/locale-langpack/en/LC_MESSAGES/grep.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
2715210 openat(AT_FDCWD, "/proc/self/maps", O_RDONLY) = 3
2715209 openat(AT_FDCWD, "/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
2715209 +++ exited with 1 +++
2715206 --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=2715209, si_uid=1000, si_status=1, si_utime=0, si_stime=0} ---
2715210 +++ exited with 1 +++
2715206 --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=2715210, si_uid=1000, si_status=1, si_utime=0, si_stime=0} ---
2715211 openat(AT_FDCWD, "/dev/null", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 3
2715212 openat(AT_FDCWD, "/dev/null", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 3
2715211 execve("/usr/bin/xprop", ["xprop", "-root"], 0x65422ee4ddd8 /* 41 vars */ <unfinished ...>
2715212 execve("/usr/bin/grep", ["grep", "-i", "^xfce_desktop_window"], 0x65422ee4ddd8 /* 41 vars */ <unfinished ...>
2715211 <... execve resumed>)           = 0
2715211 openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
2715212 <... execve resumed>)           = 0
2715211 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libX11.so.6", O_RDONLY|O_CLOEXEC) = 3
2715212 openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
2715212 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libpcre2-8.so.0", O_RDONLY|O_CLOEXEC) = 3
2715211 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
2715212 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
2715211 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libxcb.so.1", O_RDONLY|O_CLOEXEC) = 3
2715211 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libXau.so.6", O_RDONLY|O_CLOEXEC) = 3
2715211 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libXdmcp.so.6", O_RDONLY|O_CLOEXEC) = 3
2715212 openat(AT_FDCWD, "/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
2715211 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libbsd.so.0", O_RDONLY|O_CLOEXEC) = 3
2715212 openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/gconv/gconv-modules.cache", O_RDONLY|O_CLOEXEC) = 3
2715212 openat(AT_FDCWD, "/usr/share/locale/locale.alias", O_RDONLY|O_CLOEXEC) = 3
2715211 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libmd.so.0", O_RDONLY|O_CLOEXEC) = 3
2715212 openat(AT_FDCWD, "/usr/share/locale/en_US.UTF-8/LC_MESSAGES/grep.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
2715212 openat(AT_FDCWD, "/usr/share/locale/en_US.utf8/LC_MESSAGES/grep.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
2715212 openat(AT_FDCWD, "/usr/share/locale/en_US/LC_MESSAGES/grep.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
2715212 openat(AT_FDCWD, "/usr/share/locale/en.UTF-8/LC_MESSAGES/grep.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
2715212 openat(AT_FDCWD, "/usr/share/locale/en.utf8/LC_MESSAGES/grep.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
2715212 openat(AT_FDCWD, "/usr/share/locale/en/LC_MESSAGES/grep.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
2715212 openat(AT_FDCWD, "/usr/share/locale-langpack/en_US.UTF-8/LC_MESSAGES/grep.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
2715212 openat(AT_FDCWD, "/usr/share/locale-langpack/en_US.utf8/LC_MESSAGES/grep.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
2715212 openat(AT_FDCWD, "/usr/share/locale-langpack/en_US/LC_MESSAGES/grep.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
2715212 openat(AT_FDCWD, "/usr/share/locale-langpack/en.UTF-8/LC_MESSAGES/grep.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
2715212 openat(AT_FDCWD, "/usr/share/locale-langpack/en.utf8/LC_MESSAGES/grep.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
2715212 openat(AT_FDCWD, "/usr/share/locale-langpack/en/LC_MESSAGES/grep.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
2715212 openat(AT_FDCWD, "/proc/self/maps", O_RDONLY) = 3
2715211 openat(AT_FDCWD, "/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
2715211 +++ exited with 1 +++
2715206 --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=2715211, si_uid=1000, si_status=1, si_utime=0, si_stime=0} ---
2715212 +++ exited with 1 +++
2715206 --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=2715212, si_uid=1000, si_status=1, si_utime=0, si_stime=0} ---
2715214 execve("/usr/bin/grep", ["grep", "-q", "^Enlightenment"], 0x65422ee4ddd8 /* 41 vars */ <unfinished ...>
2715213 +++ exited with 0 +++
2715206 --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=2715213, si_uid=1000, si_status=0, si_utime=0, si_stime=0} ---
2715214 <... execve resumed>)           = 0
2715214 openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
2715214 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libpcre2-8.so.0", O_RDONLY|O_CLOEXEC) = 3
2715214 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
2715214 openat(AT_FDCWD, "/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
2715214 openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/gconv/gconv-modules.cache", O_RDONLY|O_CLOEXEC) = 3
2715214 openat(AT_FDCWD, "/usr/share/locale/locale.alias", O_RDONLY|O_CLOEXEC) = 3
2715214 openat(AT_FDCWD, "/usr/share/locale/en_US.UTF-8/LC_MESSAGES/grep.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
2715214 openat(AT_FDCWD, "/usr/share/locale/en_US.utf8/LC_MESSAGES/grep.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
2715214 openat(AT_FDCWD, "/usr/share/locale/en_US/LC_MESSAGES/grep.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
2715214 openat(AT_FDCWD, "/usr/share/locale/en.UTF-8/LC_MESSAGES/grep.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
2715214 openat(AT_FDCWD, "/usr/share/locale/en.utf8/LC_MESSAGES/grep.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
2715214 openat(AT_FDCWD, "/usr/share/locale/en/LC_MESSAGES/grep.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
2715214 openat(AT_FDCWD, "/usr/share/locale-langpack/en_US.UTF-8/LC_MESSAGES/grep.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
2715214 openat(AT_FDCWD, "/usr/share/locale-langpack/en_US.utf8/LC_MESSAGES/grep.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
2715214 openat(AT_FDCWD, "/usr/share/locale-langpack/en_US/LC_MESSAGES/grep.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
2715214 openat(AT_FDCWD, "/usr/share/locale-langpack/en.UTF-8/LC_MESSAGES/grep.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
2715214 openat(AT_FDCWD, "/usr/share/locale-langpack/en.utf8/LC_MESSAGES/grep.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
2715214 openat(AT_FDCWD, "/usr/share/locale-langpack/en/LC_MESSAGES/grep.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
2715214 openat(AT_FDCWD, "/proc/self/maps", O_RDONLY) = 3
2715214 +++ exited with 1 +++
2715206 --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=2715214, si_uid=1000, si_status=1, si_utime=0, si_stime=0} ---
2715215 openat(AT_FDCWD, "/dev/null", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 3
2715215 execve("/usr/bin/uname", ["uname"], 0x65422ee52738 /* 41 vars */) = 0
2715215 openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
2715215 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
2715215 openat(AT_FDCWD, "/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
2715215 +++ exited with 0 +++
2715206 --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=2715215, si_uid=1000, si_status=0, si_utime=0, si_stime=0} ---
2715217 execve("/usr/bin/grep", ["grep", "-q", "^file://"], 0x65422ee51098 /* 41 vars */ <unfinished ...>
2715216 +++ exited with 0 +++
2715206 --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=2715216, si_uid=1000, si_status=0, si_utime=0, si_stime=0} ---
2715217 <... execve resumed>)           = 0
2715217 openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
2715217 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libpcre2-8.so.0", O_RDONLY|O_CLOEXEC) = 3
2715217 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
2715217 openat(AT_FDCWD, "/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
2715217 openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/gconv/gconv-modules.cache", O_RDONLY|O_CLOEXEC) = 3
2715217 openat(AT_FDCWD, "/usr/share/locale/locale.alias", O_RDONLY|O_CLOEXEC) = 3
2715217 openat(AT_FDCWD, "/usr/share/locale/en_US.UTF-8/LC_MESSAGES/grep.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
2715217 openat(AT_FDCWD, "/usr/share/locale/en_US.utf8/LC_MESSAGES/grep.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
2715217 openat(AT_FDCWD, "/usr/share/locale/en_US/LC_MESSAGES/grep.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
2715217 openat(AT_FDCWD, "/usr/share/locale/en.UTF-8/LC_MESSAGES/grep.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
2715217 openat(AT_FDCWD, "/usr/share/locale/en.utf8/LC_MESSAGES/grep.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
2715217 openat(AT_FDCWD, "/usr/share/locale/en/LC_MESSAGES/grep.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
2715217 openat(AT_FDCWD, "/usr/share/locale-langpack/en_US.UTF-8/LC_MESSAGES/grep.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
2715217 openat(AT_FDCWD, "/usr/share/locale-langpack/en_US.utf8/LC_MESSAGES/grep.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
2715217 openat(AT_FDCWD, "/usr/share/locale-langpack/en_US/LC_MESSAGES/grep.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
2715217 openat(AT_FDCWD, "/usr/share/locale-langpack/en.UTF-8/LC_MESSAGES/grep.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
2715217 openat(AT_FDCWD, "/usr/share/locale-langpack/en.utf8/LC_MESSAGES/grep.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
2715217 openat(AT_FDCWD, "/usr/share/locale-langpack/en/LC_MESSAGES/grep.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
2715217 openat(AT_FDCWD, "/proc/self/maps", O_RDONLY) = 3
2715217 +++ exited with 1 +++
2715206 --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=2715217, si_uid=1000, si_status=1, si_utime=0, si_stime=0} ---
2715218 +++ exited with 0 +++
2715206 --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=2715218, si_uid=1000, si_status=0, si_utime=0, si_stime=0} ---
2715219 execve("/usr/bin/egrep", ["egrep", "-q", "^[[:alpha:]+\\.\\-]+:"], 0x65422ee51098 /* 41 vars */) = 0
2715219 openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
2715219 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
2715219 openat(AT_FDCWD, "/usr/bin/egrep", O_RDONLY) = 3
2715219 execve("/home/adminpc/bin/grep", ["grep", "-E", "-q", "^[[:alpha:]+\\.\\-]+:"], 0x59b0a7422b78 /* 41 vars */) = -1 ENOENT (No such file or directory)
2715219 execve("/home/adminpc/.vscode-server/cli/servers/Stable-fabdb6a30b49f79a7aba0f2ad9df9b399473380f/server/bin/remote-cli/grep", ["grep", "-E", "-q", "^[[:alpha:]+\\.\\-]+:"], 0x59b0a7422b78 /* 41 vars */) = -1 ENOENT (No such file or directory)
2715219 execve("/home/adminpc/.local/bin/grep", ["grep", "-E", "-q", "^[[:alpha:]+\\.\\-]+:"], 0x59b0a7422b78 /* 41 vars */) = -1 ENOENT (No such file or directory)
2715219 execve("/home/adminpc/bin/grep", ["grep", "-E", "-q", "^[[:alpha:]+\\.\\-]+:"], 0x59b0a7422b78 /* 41 vars */) = -1 ENOENT (No such file or directory)
2715219 execve("/usr/local/sbin/grep", ["grep", "-E", "-q", "^[[:alpha:]+\\.\\-]+:"], 0x59b0a7422b78 /* 41 vars */) = -1 ENOENT (No such file or directory)
2715219 execve("/usr/local/bin/grep", ["grep", "-E", "-q", "^[[:alpha:]+\\.\\-]+:"], 0x59b0a7422b78 /* 41 vars */) = -1 ENOENT (No such file or directory)
2715219 execve("/usr/sbin/grep", ["grep", "-E", "-q", "^[[:alpha:]+\\.\\-]+:"], 0x59b0a7422b78 /* 41 vars */) = -1 ENOENT (No such file or directory)
2715219 execve("/usr/bin/grep", ["grep", "-E", "-q", "^[[:alpha:]+\\.\\-]+:"], 0x59b0a7422b78 /* 41 vars */) = 0
2715219 openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
2715219 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libpcre2-8.so.0", O_RDONLY|O_CLOEXEC) = 3
2715219 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
2715219 openat(AT_FDCWD, "/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
2715219 openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/gconv/gconv-modules.cache", O_RDONLY|O_CLOEXEC) = 3
2715219 openat(AT_FDCWD, "/usr/share/locale/locale.alias", O_RDONLY|O_CLOEXEC) = 3
2715219 openat(AT_FDCWD, "/usr/share/locale/en_US.UTF-8/LC_MESSAGES/grep.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
2715219 openat(AT_FDCWD, "/usr/share/locale/en_US.utf8/LC_MESSAGES/grep.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
2715219 openat(AT_FDCWD, "/usr/share/locale/en_US/LC_MESSAGES/grep.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
2715219 openat(AT_FDCWD, "/usr/share/locale/en.UTF-8/LC_MESSAGES/grep.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
2715219 openat(AT_FDCWD, "/usr/share/locale/en.utf8/LC_MESSAGES/grep.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
2715219 openat(AT_FDCWD, "/usr/share/locale/en/LC_MESSAGES/grep.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
2715219 openat(AT_FDCWD, "/usr/share/locale-langpack/en_US.UTF-8/LC_MESSAGES/grep.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
2715219 openat(AT_FDCWD, "/usr/share/locale-langpack/en_US.utf8/LC_MESSAGES/grep.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
2715219 openat(AT_FDCWD, "/usr/share/locale-langpack/en_US/LC_MESSAGES/grep.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
2715219 openat(AT_FDCWD, "/usr/share/locale-langpack/en.UTF-8/LC_MESSAGES/grep.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
2715219 openat(AT_FDCWD, "/usr/share/locale-langpack/en.utf8/LC_MESSAGES/grep.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
2715219 openat(AT_FDCWD, "/usr/share/locale-langpack/en/LC_MESSAGES/grep.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
2715219 openat(AT_FDCWD, "/proc/self/maps", O_RDONLY) = 3
2715219 +++ exited with 0 +++
2715206 --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=2715219, si_uid=1000, si_status=0, si_utime=0, si_stime=0} ---
2715221 execve("/usr/bin/grep", ["grep", "-q", "%s"], 0x65422ee52998 /* 41 vars */ <unfinished ...>
2715220 +++ exited with 0 +++
2715206 --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=2715220, si_uid=1000, si_status=0, si_utime=0, si_stime=0} ---
2715221 <... execve resumed>)           = 0
2715221 openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
2715221 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libpcre2-8.so.0", O_RDONLY|O_CLOEXEC) = 3
2715221 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
2715221 openat(AT_FDCWD, "/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
2715221 openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/gconv/gconv-modules.cache", O_RDONLY|O_CLOEXEC) = 3
2715221 openat(AT_FDCWD, "/usr/share/locale/locale.alias", O_RDONLY|O_CLOEXEC) = 3
2715221 openat(AT_FDCWD, "/usr/share/locale/en_US.UTF-8/LC_MESSAGES/grep.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
2715221 openat(AT_FDCWD, "/usr/share/locale/en_US.utf8/LC_MESSAGES/grep.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
2715221 openat(AT_FDCWD, "/usr/share/locale/en_US/LC_MESSAGES/grep.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
2715221 openat(AT_FDCWD, "/usr/share/locale/en.UTF-8/LC_MESSAGES/grep.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
2715221 openat(AT_FDCWD, "/usr/share/locale/en.utf8/LC_MESSAGES/grep.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
2715221 openat(AT_FDCWD, "/usr/share/locale/en/LC_MESSAGES/grep.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
2715221 openat(AT_FDCWD, "/usr/share/locale-langpack/en_US.UTF-8/LC_MESSAGES/grep.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
2715221 openat(AT_FDCWD, "/usr/share/locale-langpack/en_US.utf8/LC_MESSAGES/grep.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
2715221 openat(AT_FDCWD, "/usr/share/locale-langpack/en_US/LC_MESSAGES/grep.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
2715221 openat(AT_FDCWD, "/usr/share/locale-langpack/en.UTF-8/LC_MESSAGES/grep.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
2715221 openat(AT_FDCWD, "/usr/share/locale-langpack/en.utf8/LC_MESSAGES/grep.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
2715221 openat(AT_FDCWD, "/usr/share/locale-langpack/en/LC_MESSAGES/grep.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
2715221 openat(AT_FDCWD, "/proc/self/maps", O_RDONLY) = 3
2715221 +++ exited with 1 +++
2715206 --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=2715221, si_uid=1000, si_status=1, si_utime=0, si_stime=0} ---
2715222 execve("/home/adminpc/.vscode-server/cli/servers/Stable-fabdb6a30b49f79a7aba0f2ad9df9b399473380f/server/bin/helpers/browser.sh", ["/home/adminpc/.vscode-server/cli"..., "http://localhost:8000"], 0x65422ee52998 /* 41 vars */) = 0
2715222 openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
2715222 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
2715222 openat(AT_FDCWD, "/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
2715222 execve("/home/adminpc/bin/sh", ["sh", "/home/adminpc/.vscode-server/cli"..., "http://localhost:8000"], 0x7ffec2cffc40 /* 41 vars */) = -1 ENOENT (No such file or directory)
2715222 execve("/home/adminpc/.vscode-server/cli/servers/Stable-fabdb6a30b49f79a7aba0f2ad9df9b399473380f/server/bin/remote-cli/sh", ["sh", "/home/adminpc/.vscode-server/cli"..., "http://localhost:8000"], 0x7ffec2cffc40 /* 41 vars */) = -1 ENOENT (No such file or directory)
2715222 execve("/home/adminpc/.local/bin/sh", ["sh", "/home/adminpc/.vscode-server/cli"..., "http://localhost:8000"], 0x7ffec2cffc40 /* 41 vars */) = -1 ENOENT (No such file or directory)
2715222 execve("/home/adminpc/bin/sh", ["sh", "/home/adminpc/.vscode-server/cli"..., "http://localhost:8000"], 0x7ffec2cffc40 /* 41 vars */) = -1 ENOENT (No such file or directory)
2715222 execve("/usr/local/sbin/sh", ["sh", "/home/adminpc/.vscode-server/cli"..., "http://localhost:8000"], 0x7ffec2cffc40 /* 41 vars */) = -1 ENOENT (No such file or directory)
2715222 execve("/usr/local/bin/sh", ["sh", "/home/adminpc/.vscode-server/cli"..., "http://localhost:8000"], 0x7ffec2cffc40 /* 41 vars */) = -1 ENOENT (No such file or directory)
2715222 execve("/usr/sbin/sh", ["sh", "/home/adminpc/.vscode-server/cli"..., "http://localhost:8000"], 0x7ffec2cffc40 /* 41 vars */) = -1 ENOENT (No such file or directory)
2715222 execve("/usr/bin/sh", ["sh", "/home/adminpc/.vscode-server/cli"..., "http://localhost:8000"], 0x7ffec2cffc40 /* 41 vars */) = 0
2715222 openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
2715222 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
2715222 openat(AT_FDCWD, "/home/adminpc/.vscode-server/cli/servers/Stable-fabdb6a30b49f79a7aba0f2ad9df9b399473380f/server/bin/helpers/browser.sh", O_RDONLY) = 3
2715226 execve("/usr/bin/readlink", ["readlink", "-f", "/home/adminpc/.vscode-server/cli"...], 0x5b5b4b767078 /* 41 vars */) = 0
2715226 openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
2715226 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
2715226 openat(AT_FDCWD, "/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
2715226 +++ exited with 0 +++
2715225 --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=2715226, si_uid=1000, si_status=0, si_utime=0, si_stime=0} ---
2715225 execve("/usr/bin/dirname", ["dirname", "/home/adminpc/.vscode-server/cli"...], 0x5b5b4b766e38 /* 41 vars */) = 0
2715225 openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
2715225 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
2715225 openat(AT_FDCWD, "/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
2715225 +++ exited with 0 +++
2715224 --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=2715225, si_uid=1000, si_status=0, si_utime=0, si_stime=0} ---
2715224 execve("/usr/bin/dirname", ["dirname", "/home/adminpc/.vscode-server/cli"...], 0x5b5b4b766e38 /* 41 vars */) = 0
2715224 openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
2715224 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
2715224 openat(AT_FDCWD, "/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
2715224 +++ exited with 0 +++
2715223 --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=2715224, si_uid=1000, si_status=0, si_utime=0, si_stime=0} ---
2715223 execve("/usr/bin/dirname", ["dirname", "/home/adminpc/.vscode-server/cli"...], 0x5b5b4b766e68 /* 41 vars */) = 0
2715223 openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
2715223 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
2715223 openat(AT_FDCWD, "/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
2715223 +++ exited with 0 +++
2715222 --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=2715223, si_uid=1000, si_status=0, si_utime=0, si_stime=0} ---
2715227 execve("/home/adminpc/.vscode-server/cli/servers/Stable-fabdb6a30b49f79a7aba0f2ad9df9b399473380f/server/node", ["/home/adminpc/.vscode-server/cli"..., "/home/adminpc/.vscode-server/cli"..., "code", "1.96.2", "fabdb6a30b49f79a7aba0f2ad9df9b39"..., "code", "--openExternal", "http://localhost:8000"], 0x5b5b4b7670c8 /* 41 vars */) = 0
2715227 openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
2715227 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libdl.so.2", O_RDONLY|O_CLOEXEC) = 3
2715227 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libstdc++.so.6", O_RDONLY|O_CLOEXEC) = 3
2715227 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libm.so.6", O_RDONLY|O_CLOEXEC) = 3
2715227 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libgcc_s.so.1", O_RDONLY|O_CLOEXEC) = 3
2715227 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libpthread.so.0", O_RDONLY|O_CLOEXEC) = 3
2715227 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
2715227 openat(AT_FDCWD, "/etc/ssl/openssl.cnf", O_RDONLY) = 3
2715227 openat(AT_FDCWD, "/proc/self/cgroup", O_RDONLY|O_CLOEXEC) = 17
2715227 openat(AT_FDCWD, "/sys/fs/cgroup/user.slice/user-1000.slice/session-10298.scope/memory.max", O_RDONLY|O_CLOEXEC) = 17
2715227 openat(AT_FDCWD, "/sys/fs/cgroup/user.slice/user-1000.slice/session-10298.scope/memory.high", O_RDONLY|O_CLOEXEC) = 17
2715227 openat(AT_FDCWD, "/proc/meminfo", O_RDONLY|O_CLOEXEC) = 17
2715227 openat(AT_FDCWD, "/proc/self/maps", O_RDONLY|O_CLOEXEC) = 17
2715227 openat(AT_FDCWD, "/proc/self/maps", O_RDONLY) = 17
2715227 openat(AT_FDCWD, "/proc/self/maps", O_RDONLY) = 17
2715227 openat(AT_FDCWD, "/home/adminpc/.vscode-server/cli/servers/Stable-fabdb6a30b49f79a7aba0f2ad9df9b399473380f/server/node", O_RDONLY) = 17
2715227 openat(AT_FDCWD, "/home/adminpc/.vscode-server/cli/servers/Stable-fabdb6a30b49f79a7aba0f2ad9df9b399473380f/server/out/package.json", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
2715227 openat(AT_FDCWD, "/home/adminpc/.vscode-server/cli/servers/Stable-fabdb6a30b49f79a7aba0f2ad9df9b399473380f/server/package.json", O_RDONLY|O_CLOEXEC) = 17
2715234 openat(AT_FDCWD, "/home/adminpc/.vscode-server/cli/servers/Stable-fabdb6a30b49f79a7aba0f2ad9df9b399473380f/server/out/server-cli.js", O_RDONLY|O_CLOEXEC) = 17
2715227 openat(AT_FDCWD, "/home/adminpc/.vscode-server/cli/servers/Stable-fabdb6a30b49f79a7aba0f2ad9df9b399473380f/server/product.json", O_RDONLY|O_CLOEXEC) = 17
2715234 openat(AT_FDCWD, "/home/adminpc/.vscode-server/cli/servers/Stable-fabdb6a30b49f79a7aba0f2ad9df9b399473380f/server/out/nls.messages.json", O_RDONLY|O_CLOEXEC) = 17
2715227 openat(AT_FDCWD, "/dev/null", O_RDONLY|O_CLOEXEC) = 17
2715227 connect(18, {sa_family=AF_UNIX, sun_path="/run/user/1000/vscode-ipc-d5a87263-00c8-44d4-84fc-93a13038ef44.sock"}, 110) = 0
2715231 +++ exited with 0 +++
2715229 +++ exited with 0 +++
2715232 +++ exited with 0 +++
2715230 +++ exited with 0 +++
2715228 +++ exited with 0 +++
2715235 +++ exited with 0 +++
2715236 +++ exited with 0 +++
2715237 +++ exited with 0 +++
2715234 +++ exited with 0 +++
2715233 +++ exited with 0 +++
2715227 +++ exited with 0 +++
2715222 --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=2715227, si_uid=1000, si_status=0, si_utime=2 /* 0.02 s */, si_stime=1 /* 0.01 s */} ---
2715222 +++ exited with 0 +++
2715206 --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=2715222, si_uid=1000, si_status=0, si_utime=0, si_stime=0} ---
2715206 +++ exited with 0 +++

这里首先说下 strace 命令,终端输入

man strace

可以看到其描述
在这里插入图片描述
从描述可知,strace 是一个 Linux 系统工具,keyi 用于跟踪进程执行时的系统调用(system calls)和所接收的信号(系统调用是程序与操作系统内核交互的方式,比如打开文件、创建进程、建立网络连接等)
在这里插入图片描述
-f 选项表示跟踪主进程及其所有子进程,这里 xdg-open 命令可能会启动其他程序(比如浏览器),如果不加 -f 选项就只能看到 xdg-open 命令本身的调用,而看不到其启动浏览器的行为,加上 -f 选项可以跟踪整个调用链
在这里插入图片描述
-e trace=execve,openat,connect 选项表示只跟踪指定的这几种系统调用,而忽略其他不相关的调用,可以让日志更清晰

  • execve:执行新程序,比如启动 Firefox 或 Chrome 等浏览器
  • openat:打开文件或读取配置,比如读取浏览器设置等
  • connect:建立网络连接,比如浏览器连接到网址 localhost:8000

这样可以聚焦程序启动,配置读取,连接网络等三个关键问题,注意,这里跟踪的是系统调用,而不是命令执行本身

在这里插入图片描述
最后是选项 -o /tmp/strace.log,表示将 strace 的输出保存到文件 /tmp/strace.log 中,默认情况下,strace 会输出到终端,加 -o 选项可以重定向到文件,便于后续分析

OK,先到这里,下篇 blog 继续

http://www.dtcms.com/a/419837.html

相关文章:

  • 网站开发 报价单网站源码asp
  • Java HHH000490: Using JtaPlatform implementation
  • 网站关键词检测郑州外贸网站推广
  • 苏州网站开发的企业wordpress 结合qq
  • 在Linux中安装应用
  • 【高级语言范型介绍】
  • android 权限申请封装类
  • 个人习惯的各类chat大模型的使用场景
  • 济南网站建设与优化网站建设验收报告范本
  • 汕头网页设计网站方案网络下载的网站模板能直接上传到虚拟主机
  • C++ 异步任务详解:future, promise, async
  • 【MySQL 高阶】MySQL 程序详解
  • Cloudreve 性能卡顿?对接雨云对象存储,实现上传下载“满速飞”
  • 解锁机器人导航的全模态潜能!OmniVLA:机器人导航的全模态视觉-语言-动作模型
  • 制作一个买股票的网站怎么做网站空间与服务器
  • java-IO流-字节流
  • 为什么要学习C编程?
  • 外贸网站建设书籍东南亚营销型网站建设与网络推广
  • 烟台市政建设招标网站自己电脑做网站必须装jdk
  • 基于IMX6ULL芯片--I2C总线简单应用
  • 360网站卫士代备案流程推广员是什么工作
  • 特别分享:LangChain——构建强大LLM应用的“万能胶水”
  • 硬件开发2-ARM裸机开发3-I.MX6ULL - 时钟、定时器
  • Information Fusion | Modal-NexT:统一的多模态细胞数据整合
  • 医院信息化建设网站梵克雅宝手链
  • seo建站的步骤刷关键词排名
  • 初识网站开发流程图石家庄新闻发布会直播
  • 网站推广在哪些平台做外链微商刚起步怎么找客源
  • 怎样做化妆品公司网站wordpress 免费企业网站 模板下载
  • 禅道 v21.7.5 Docker 一键部署