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

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

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

答案1

您可以观察该过程做了什么斯特雷斯命令。斯特雷斯显示系统调用由一个进程执行。影响其环境的进程的所有事情都是通过系统调用完成的。例如,创建目录只能通过最终调用mkdir系统调用。这mkdir外壳命令是同名系统调用的薄包装。

要查看mkdir正在执行的操作,请运行

strace mkdir foo

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

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

strace -o file_manager.mkdir.strace -p1234

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

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

strace -e \!read,write,select …

仅记录mkdir通话:

strace -e mkdir …

好吧,几乎一切。共享内存仅涉及初始设置的系统调用。

相关内容