Как знать, какие команды выполняются, когда я делаю что-то в GUI

Можно также использовать who или w видеть, в кого в настоящее время входят система, включая пользователей SSH.

6
30.12.2012, 13:14
1 ответ

Можно наблюдать то, что процесс делает с командой strace. Strace показывает системные вызовы, выполненные процессом. Все ¹ процесс, который влияет на его среду, сделано через системные вызовы. Например, создание каталога может только быть сделано путем окончательного вызова mkdir системный вызов. mkdir команда оболочки является тонкой оберткой вокруг системного вызова того же имени.

Видеть что mkdir делает, выполненный

strace mkdir foo

Вы будете видеть много вызовов кроме mkdir (76 всего для успешного mkdir в моей системе), начиная с execve который загружает двухуровневое изображение процесса, затем звонит для загрузки библиотек и файлов данных, используемых программой, звонит для выделения памяти, звонит для наблюдения состояния системы, … Наконец вызовы команды mkdir и переносится вниз, заканчиваясь с exit_group.

Для наблюдения, что делает программа GUI запустите ее и только наблюдайте его во время одного действия. Узнайте идентификатор процесса программы (с 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 …

¹ хорошо, почти все. Общая память только включает системный вызов начальной настройки.

5
27.01.2020, 20:29

Теги

Похожие вопросы