Автор: Адриан фон Биддер (Adrian von Bidder)
Перевод: Алексей Бешенов
2008-03-12
Автор: Адриан вон Биддер (Adrian von Bidder). Оригинал: «psmisc: a closer look to a standard package» , 13 января 2008 г.
Пакет psmisc установлен практически во всех системах Debian и Ubuntu и содержит несколько маленьких программ, связанных с управлением процессами Unix: pstree, killall, fuser и peekfd. Ниже следует краткое описание этих полезных средств. Хотя, конечно, все знают про killall и даже про pstree, в пакете также есть fuser и peekfd, которые для меня лично до недавнего времени были новыми (хотя я слышал, что по крайней мере fuser существует давно; позор мне).
killall столь же ужасен, как и называется: он убивает все процессы с указанным именем. По умолчанию используется SIGTERM, но, конечно, может посылаться любой другой сигнал. Также есть опции определения процессов регулярными выражениями или по группам. Обычно я использую это для уничтожения элементов KDE командой вроде
$ killall kio_imap4Это приходится делать, так как у KMail есть некоторые проблемы с работой с моим IMAP-сервером. (Отдельно стоит упомянуть программу slay из пакета slay, которая просто убивает процессы, принадлежащие указанному пользователю.)
Хороший обзор того, что запущено в системе, дает вывод pstree. Вот часть вывода у меня:
$ pstree
init─┬─NetworkManager───2*[{NetworkManager}]
├─NetworkManagerD
├─acpid
├─hald───hald-runner─┬─hald-addon-acpi
│ ├─hald-addon-cpuf
│ ├─hald-addon-dell
│ ├─hald-addon-inpu
│ └─hald-addon-stor
├─kdeinit─┬─artsd
│ ├─2*[kio_file]
│ ├─kio_http
│ ├─3*[kio_imap4]
│ ├─kioexec───wfica.sh───wfica
│ ├─klauncher
│ ├─konqueror
│ ├─konsole───bash─┬─pstree
│ │ └─xchat───{xchat}
│ └─kwin
├─kdesktop───lineakd───2*[{lineakd}]
├─kdm─┬─Xorg
│ └─kdm───startkde───kwrapper
└─sshd
Опции pstree включают отображение идентификаторов процессов, пользователей и контекстов безопасности SE Linux.
fuser позволяет выяснить, какой процесс использует определенный файл, например:
$ fuser -v /home/avbidder/.xsession-errors
USER PID ACCESS COMMAND
/home/avbidder/.xsession-errors:
avbidder 4409 F.... startkde
avbidder 4533 F.... kdeinit
avbidder 4536 F.... dcopserver
avbidder 4538 F.... klauncher
avbidder 4540 F.... kded
avbidder 4547 F.... kwrapper
avbidder 4549 F.... ksmserver
avbidder 4550 F.... kwin
avbidder 4552 F.... kdesktop
avbidder 4554 F.... kicker
avbidder 4562 F.... artsd
avbidder 4567 F.... kmix
avbidder 4568 F.... konsole
avbidder 4572 F.... beagled
avbidder 4574 F.... lineakd
avbidder 4579 F.... knetworkmanager
avbidder 4680 F.... knotify
avbidder 4916 F.... kio_uiserver
avbidder 5706 F.... akregator
avbidder 5708 F.... kttsd
avbidder 5742 F.... kio_file
avbidder 5864 F.... beagled-helper
avbidder 6939 F.... konqueror
avbidder 7076 F.... konqueror
avbidder 7185 F.... kmail
avbidder 7696 F.... kio_imap4
Также fuser может посылать сигналы этим программам, так что вы можете убить их при помощи
fuser -k /home/avbidder/.xsession-errors(по умолчанию используется SIGKILL, но это, разумеется, можно поменять.)
В то время как fuser — обычный инструмент системного администратора, peekfd осуществляет более глубокое погружение: он позволяет смотреть, что происходит с файловым дескриптором процесса. (Обратите внимание: peekfd нет в Etch, требуется psmisc из Lenny или еще новее.)
Если вы запустите в терминале peekfd, команда просмотрит все дескрипторы процессов, чтобы вывести приблизительно такое:
$ peekfd 7808Здесь 7808 — просто cat >/dev/null в другом окне терминала, и я пишу там «foo bar». Страница руководства предупреждает, что отслеживаемые процессы могут завершаться; я с этим не встречался, но мне случалось получать несколько раз ошибку segmentation fault от peekfd, так что мне кажется, что за кулисами прячется настоящая черная магия.writing fd 1: foo bar
Вместо отслеживания всего ввода-вывода процесса, можно получить просто список файлов, которые процесс открывал. Узнать, какие дескрипторы стоит проверить, удобно при помощи директории /proc//fd.
Итак, я надеюсь, что эта статья поможет более пристально взглянуть на пакеты, которые вы устанавливали еще со времен Potato и с тех пор внимательно не изучали…