Как сказал Мэтью, strace использует системный вызов ptrace (2) , чтобы творить свою магию.ptrace используется для реализации отладчиков и других инструментов, которые должны проверять, что делает другая программа.По сути, strace вызывает ptrace и присоединяется к целевому процессу.
Всякий раз, когда целевой процесс выполняет системный вызов, он останавливается, и strace получает уведомление.Затем strace проверит регистры и стек целевого процесса (также используя ptrace), чтобы определить, какой системный вызов был сделан (каждый вызов имеет уникальный номер, переданный в регистр) и каковы были аргументы.Затем Strace возобновляет процесс.Когда он возвращается из системного вызова, он останавливается, и strace снова уведомляется, чтобы он мог проверить возвращаемое значение.strace печатает некоторую информацию для пользователя каждый раз, когда это происходит.
В ответ на ваш второй вопрос системный вызов отличается от обычного вызова функции тем, что системный вызов реализован в ядре, а обычная функция реализована в пространстве пользователя.Это целая червячная банка.