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