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