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 继续