当我在 GUI 中执行某些操作时如何知道执行了哪些命令

use*_*539 7 linux process monitoring architecture

这是出于学术目的。我想知道在 GUI 中执行某些操作时会执行哪些命令,例如创建文件夹。我想说明来自 GUI的mkdirshell 命令和create folder选项都做同样的事情。

Gil*_*il' 6

您可以使用strace命令观察该进程的作用。Strace 显示进程执行的系统调用。一切¹影响其环境的过程都是通过系统调用完成的。例如,创建目录只能通过最终调用mkdir系统调用来完成。该mkdirshell命令是围绕着同一个名字的系统调用的简单封装。

要查看mkdir正在做什么,请运行

strace mkdir foo
Run Code Online (Sandbox Code Playgroud)

除了mkdirmkdir在我的系统上成功总共 76 个)之外,您会看到很多调用,首先execve加载进程二进制映像,然后调用加载程序使用的库和数据文件,调用分配内存,调用以观察系统状态,...最后命令调用mkdir并结束,以exit_group.

要观察 GUI 程序在做什么,请启动它并仅在一个操作期间观察它。找出程序的进程ID(与ps xhtop或任何其他进程浏览器),然后运行

strace -o file_manager.mkdir.strace -p1234
Run Code Online (Sandbox Code Playgroud)

这会将来自进程 1234 的跟踪放在文件中file_manager.mkdir.strace。按Ctrl+C停止strace而不停止程序。请注意,输入目录名称之类的操作可能涉及数千或数万次系统调用:处理鼠标移动、焦点更改等在该级别比创建目录复杂得多。

您可以strace通过传递-e选项来选择在输出中记录哪些系统调用。例如,省略read,writeselect

strace -e \!read,write,select …
Run Code Online (Sandbox Code Playgroud)

只记录mkdir通话:

strace -e mkdir …
Run Code Online (Sandbox Code Playgroud)

¹好的,几乎所有内容。共享内存只涉及初始设置的系统调用。