Сегодня, перезагрузив ноутбук, я удивился странной дисковой активности – я не запускал ни одного ресурсоёмкого приложения, но
“Непорядок” – решил я и привычно расчехлил dtrace:
$ sudo /usr/sbin/dtrace -n \ 'syscall::open*:entry {printf("%s %s", execname, copyinstr(arg0));}'
Результатом было обилие строк вида:
1 19256 open_nocancel:entry find AppleLowshelf.nib 1 19256 open_nocancel:entry find AppleMultiband.nib 1 19256 open_nocancel:entry find AppleParametricEQ.nib 1 19256 open_nocancel:entry find DLSUI.nib 1 19256 open_nocancel:entry find Italian.lproj
find… Я не запускал его. Кто же?
$ ps ax | grep find | grep -v grep 265 ?? UN 0:36.76 find -s / ! ( -fstype hfs -or -fstype ufs ) -prune -or -path /private/tmp -prune -or -path /private/var/folders -prune -or -path /private/var/tmp -prune -or -path */Backups.backupdb -prune -or -print
Номер процесса у меня появился, но вот что дальше? Нужно найти родительский процесс, запустивший этот find…
Update. Спасибо opti и tsybulin за комментарии – поиск родительского процесса можно сделать в иерархическое представление в Activity Monitor или же командой “ps -Ao pid,ppid,command”. Но вот без dtrace не обойтись – в Activity Monitor может отразиться CPU, но не дисковая активность процесса.
К сожалению, я не смог вспомнить штатную утилиту Mac OS X, позволяющую строить дерево процессов, а время торопило – find мог закончиться до того, как я нашёл бы решение. Поэтому мне на помощь пришёл MacPorts, с помощью него я быстро поставил
$ port search pstree pstree @2.33 (sysutils) pstree shows the output of the ps command as a tree $ sudo port install pstree
Записав дерево процессов в файл, я быстро определил, кто же запустил процесс find:
$ pstree > ps.txt $ view ps.tree |-+= 00216 root /bin/sh /usr/libexec/locate.updatedb | \-+- 00243 root su -fm nobody -c /usr/libexec/locate.updatedb | \-+= 00260 nobody /bin/sh /usr/libexec/locate.updatedb | |--- 00265 nobody find -s / ! ( -fstype hfs -or -fstype ufs ) -prune -or -path /private/tmp -prune -or -path /private/var/folders -prune -or -path /private/var/tmp -prune -or -path */Backups.backupdb -prune -or -print | \-+- 00266 nobody /bin/sh /usr/libexec/locate.mklocatedb -presort | \--- 00268 nobody locate.code /tmp/locatepPGiUebwvm/mklocates1B1ib6Fqw/_mklocatedb266.bigrams
Ложная тревога – виновником был
$ locate httpd-vhosts.conf /opt/local/apache2/conf/extra/httpd-vhosts.conf /private/etc/apache2/extra/httpd-vhosts.conf /private/etc/apache2/original/extra/httpd-vhosts.conf
“It is typically run once a week by the /System/Library/LaunchDaemons/com.apple.locate.plist job.” Неделя прошла, процесс при старте системы запустился.
Источник странной активности найден, снова впал у умиротворённое состояние. Надолго ли?