use*_*539 7 linux process monitoring architecture
这是出于学术目的。我想知道在 GUI 中执行某些操作时会执行哪些命令,例如创建文件夹。我想说明来自 GUI的mkdir
shell 命令和create folder
选项都做同样的事情。
您可以使用strace命令观察该进程的作用。Strace 显示进程执行的系统调用。一切¹影响其环境的过程都是通过系统调用完成的。例如,创建目录只能通过最终调用mkdir
系统调用来完成。该mkdir
shell命令是围绕着同一个名字的系统调用的简单封装。
要查看mkdir
正在做什么,请运行
strace mkdir foo
Run Code Online (Sandbox Code Playgroud)
除了mkdir
(mkdir
在我的系统上成功总共 76 个)之外,您会看到很多调用,首先execve
加载进程二进制映像,然后调用加载程序使用的库和数据文件,调用分配内存,调用以观察系统状态,...最后命令调用mkdir
并结束,以exit_group
.
要观察 GUI 程序在做什么,请启动它并仅在一个操作期间观察它。找出程序的进程ID(与ps x
,htop
或任何其他进程浏览器),然后运行
strace -o file_manager.mkdir.strace -p1234
Run Code Online (Sandbox Code Playgroud)
这会将来自进程 1234 的跟踪放在文件中file_manager.mkdir.strace
。按Ctrl+C停止strace
而不停止程序。请注意,输入目录名称之类的操作可能涉及数千或数万次系统调用:处理鼠标移动、焦点更改等在该级别比创建目录复杂得多。
您可以strace
通过传递-e
选项来选择在输出中记录哪些系统调用。例如,省略read
,write
和select
:
strace -e \!read,write,select …
Run Code Online (Sandbox Code Playgroud)
只记录mkdir
通话:
strace -e mkdir …
Run Code Online (Sandbox Code Playgroud)
¹好的,几乎所有内容。共享内存只涉及初始设置的系统调用。