Solaris OpenIndiana использование утилиты truss

Утилита truss используется для отслеживания системных вызовов и сигналов различных процессов
операционной системы.

Использование без ключей
# truss /usr/lib/ssh/sshd

Основные ключи
-p <PID> утилита подключается к процессу по pid
-o outfile запись результатов работы в файл
-c вывод информации в виде сводки
-a отображаются строки аргументов, которые передаются в каждом exec() системном вызове
-d устанавливается отметка времени для каждой строки вывода трассировки
-e отображаются строки окружения, которые передаются в каждом exec() системном вызове
-i прерываемые и sleeping вызовы не отображаются
-t определение системных вызовов, которые будут участвовать в трассировке
-s определение сигналов, которые будут участвовать в трассировке
-f включается трассировка дочерних процессов порожденных вызовами fork() vfork()

Сбор информации о процессе с PID 1380 в файл sshd.output
# truss  -o /var/tmp/sshd.output -p 1380

Отображение трассировки read, write системных вызовов
# truss -c -t read,write /usr/sbin/ping 10.10.10.111
10.10.10.111 is alive

syscall               seconds   calls  errors
read                     .000       9
write                    .000       1
                     --------  ------   ----
sys totals:              .000      10      0
usr time:                .000
elapsed:                 .010

Пример трассировки с ключом -f
# truss -f -o /var/tmp/useradd.out /usr/sbin/useradd -m -d /export/home/usr usr
# more  /var/tmp/useradd.out | grep fork
1612:   fork1()                                         = 1613
1613:   fork1()         (returning as child ...)        = 1612

Пример Ошибок в вызовах при попытке размонтирования файловой системы занятой процесамми
# truss  -t  read,write,open umount /fz
open("/var/ld/ld.config", O_RDONLY)             Err#2 ENOENT
open("/lib/libc.so.1", O_RDONLY)                = 3
open("/etc/mnttab", O_RDONLY)                 = 3
umountwrite(2, " u m o u n t", 6)                   = 6
: write(2, " :  ", 2)                            = 2
/fzwrite(2, " / f z", 3)                     = 3
 busy
write(2, "   b u s y\n", 6)                = 6

Документацию по системным вызовам для Solaris  можно найти на docs.oracle.com

Дополнительная информация