Например, в linux-машине так много процессов. Каждый из них может использовать системный вызов, но обычно используются немногие. Что ж, есть инструмент или способ показать, когда используется системный вызов и какой процесс связан с ним?
Возможно ли отслеживать в режиме реального времени все системные вызовы под Linux?
Ответы (2)
Вы можете использовать различные инструменты, такие как strace
, ltrace
и многие другие, хотя я не уверен, что вы хотите отслеживать все процессы одновременно.
Обычно вы подключаетесь к одному интересующему процессу и следите за его системными вызовами.
person
favoretti
schedule
05.08.2012
Ну, я могу использовать strace для одного процесса. А если пользователь создает новый файл, могу ли я увидеть системный вызов, связанный с его созданием с помощью этого метода?
- person user840718; 06.08.2012
это не пользователь, а процесс, который действительно создает этот файл. если вы подключены к этому процессу, то да... если вы хотите только мониторить FS, для этого есть другие инструменты.
- person Karoly Horvath; 06.08.2012
Да, моя цель - мониторинг ФС в режиме реального времени, за конкретными файлами, а не за процессом. Итак, я думаю о системном вызове, потому что это основная инструкция, которую запускает ядро.
- person user840718; 06.08.2012
Затем вы можете использовать
lnotify
или что-то еще более причудливое, например, монитор изменений splunk FS (docs.splunk.com/Documentation/Splunk/latest/Data/) :)
- person favoretti; 06.08.2012
@ user840718, тогда вам следует использовать systemtap и oprofile, которые могут отслеживать и профилировать всю систему, а не только один процесс, как это делает strace.
- person nos; 06.08.2012
Вы можете использовать подсистему аудита ядра Linux.
Например, чтобы увидеть все системные вызовы, сделанные программой sshd (pid - 12345):
# auditctl -a entry,always -S all -F pid=12345
person
Ilya Matveychikov
schedule
06.08.2012
strace
— мой любимый инструмент для отслеживания конкретного процесса. - person Kenji Noguchi   schedule 06.08.2012