我尝试运行命令
strace -f gnome-terminal --wait |& grep write
然后在打开的终端窗口中输入ls
并按 Enter 键。
我希望看到与, ,write
字符相对应的系统调用被发送到在终端内运行的 Bash 子进程,以及子子进程写入其输出时的系统调用,但是当我运行 时,我没有看到任何系统调用发生。l
s
\n
write
ls
ls
write
当我运行时我确实看到了这些系统调用
strace -f xterm |& grep write
为什么strace -f
无法跟踪 的子进程gnome-terminal
?
答案1
执行终端仿真的实际操作gnome-terminal-server
并不是gnome-terminal
您启动的命令的后代。通过一些/或类似的魔法(我不熟悉)gnome-terminal
启动,即要求已经运行的服务启动终端。gnome-terminal-server
systemd
dbus
您可以找出gnome-terminal-server
PID 并使用 附加到它strace -p PID
。请注意,如果您有多个gnome-terminal
选项卡或窗口,这将跟踪所有它们。