Категорії
Solaris

Полезные команды при работе с процессами

Многие знают такие команды как ps, pgrep, pkill но в Solaris есть и другие команды, которые помогут вам в трудную минуту. Речь пойдёт о командах pfiles, pcred, pflags, pldd, pmap, psig, pstack, ptime, ptree, pwait, pwdx, pargs, preap

Тестовый стенд: Solaris 10/11

pfiles

Выводи список открытых файлов, дескрипторов, сокетов указанным процессом (в Solaris 10 нету строк offset):

# pfiles 962
962:    /usr/lib/sendmail -Ac -q15m
  Current rlimit: 1024 file descriptors
   0: S_IFCHR mode:0666 dev:530,0 ino:113246216 uid:0 gid:3 rdev:216,2
      O_RDONLY|O_LARGEFILE
      /devices/pseudo/mm@0:null
      offset:0
   1: S_IFCHR mode:0666 dev:530,0 ino:113246216 uid:0 gid:3 rdev:216,2
      O_WRONLY|O_LARGEFILE
      /devices/pseudo/mm@0:null
      offset:0
   2: S_IFCHR mode:0666 dev:530,0 ino:113246216 uid:0 gid:3 rdev:216,2
      O_WRONLY|O_LARGEFILE
      /devices/pseudo/mm@0:null
      offset:0
   3: S_IFDOOR mode:0444 dev:540,0 ino:47 uid:0 gid:0 size:0
      O_RDONLY|O_LARGEFILE FD_CLOEXEC  door to nscd[389]
      /system/volatile/name_service_door
   4: S_IFCHR mode:0000 dev:530,0 ino:31049 uid:0 gid:0 rdev:234,46
      O_WRONLY FD_CLOEXEC
      /devices/pseudo/log@0:conslog
      offset:0
   5: S_IFREG mode:0600 dev:124,65543 ino:16463 uid:25 gid:25 size:32
      O_WRONLY|O_LARGEFILE
      /var/spool/clientmqueue/sm-client.pid
      offset:32

Есть так же параметр -F для вывода процессов, даже если они контролируются другим процессом

pcred

Используется для определения/изменения real, effective UID/GID процессов. То есть при желании можно изменить владельца процесса прямо налету

# pcred 962
962:    e/r/suid=25  e/r/sgid=25

pflags

Выводит флаги трассировки, сигналы задержки и прочую информацию из каталога /proc для заданного процесса:

# pflags 962
962:    /usr/lib/sendmail -Ac -q15m
        data model = _ILP32  flags = ORPHAN|MSACCT|MSFORK
 /1:    flags = ASLEEP  pause()

pldd

Выводит слинкованные библиотеки для заданного процесса (в Solaris 10 у этой команды отсутствует ключ -l, который позволяет вывести unresolved библиотеки, а так же отличается список слинкованных библиотек для одного и того же приложения):

# pldd -l 962
962:    /usr/lib/sendmail -Ac -q15m
/lib/libumem.so.1
/lib/libc.so.1
/lib/libresolv.so.2
/lib/libnsl.so.1
/lib/libsocket.so.1
/lib/libmd.so.1
/lib/libssl.so.1.0.0
/lib/libcrypto.so.1.0.0

pmap

Выводит информацию об адресном пространстве процесса (карта процесса)

# pmap 962
962:    /usr/lib/sendmail -Ac -q15m
08037000      68K rw---    [ stack ]
08050000     904K r-x--  /usr/lib/sendmail
08142000      12K rw---  /usr/lib/sendmail
08145000     636K rw---    [ heap ]
FE390000      96K r-x--  /lib/libumem.so.1
FE3B8000      20K rw---  /lib/libumem.so.1
FE3BD000      24K rw---  /lib/libumem.so.1
FE3D0000     436K r-x--  /lib/libnsl.so.1
FE44D000       8K rw---  /lib/libnsl.so.1
FE44F000      20K rw---  /lib/libnsl.so.1
FEAC5000       4K rwxs-    [ anon ]
FEAD0000    1228K r-x--  /lib/libcrypto.so.1.0.0
FEC13000      76K rw---  /lib/libcrypto.so.1.0.0
FEC26000       8K rw---  /lib/libcrypto.so.1.0.0
FEC30000       4K rw---    [ anon ]
FEC40000     284K r-x--  /lib/libssl.so.1.0.0
FEC97000      16K rw---  /lib/libssl.so.1.0.0
FECA0000       4K r--s-  dev:536,1 ino:562971607
FECB0000      64K rwx--    [ anon ]
FECD0000      64K rwx--    [ anon ]
FECF0000      64K r-x--  /lib/libmd.so.1
FED00000       4K rw---  /lib/libmd.so.1
FED10000       4K rw---    [ anon ]
FED20000      64K rwx--    [ anon ]
FED40000      24K rwx--    [ anon ]
FED50000      56K r-x--  /lib/libsocket.so.1
FED6E000       4K rw---  /lib/libsocket.so.1
FED70000       4K rw---    [ anon ]
FED80000       4K rw---    [ anon ]
FED90000     300K r-x--  /lib/libresolv.so.2
FEDEB000       4K rw---  /lib/libresolv.so.2
FEDEC000       4K rw---  /lib/libresolv.so.2
FEDF0000    1352K r-x--  /usr/lib/libc/libc_hwcap1.so.1
FEF52000      44K rwx--  /usr/lib/libc/libc_hwcap1.so.1
FEF5D000       4K rwx--  /usr/lib/libc/libc_hwcap1.so.1
FEF60000       4K rw---    [ anon ]
FEF70000       4K r--s-  /var/ld/ld.config
FEF80000       4K rw---    [ anon ]
FEF90000       4K rw---    [ anon ]
FEFA0000       4K rw---    [ anon ]
FEFB0000       4K rw---    [ anon ]
FEFB7000     208K r-x--  /lib/ld.so.1
FEFFB000       8K rwx--  /lib/ld.so.1
FEFFD000       4K rwx--  /lib/ld.so.1
 total      6156K

psig

Выводит информацию о том, на какие сигналы реагирует процесс и как именно (в Solaris 10 список сигналов меньше).

962:    /usr/lib/sendmail -Ac -q15m
HUP     caught  runners_sighup  RESTART,SIGINFO
INT     ignored
QUIT    ignored
ILL     default
TRAP    default
ABRT    default
EMT     default
FPE     default
KILL    default
BUS     default
SEGV    default
SYS     default
PIPE    ignored
ALRM    caught  sm_tick         RESTART,SIGINFO
TERM    caught  runners_sigterm RESTART,SIGINFO
USR1    caught  sigusr1         RESTART,SIGINFO
USR2    default
CLD     caught  reapchild       RESTART,SIGINFO
...

pstack

Выводит трассировку стека процесса (в Solaris 10 вместо _start вывелось ?????? = может просто проблема именно в этом процессе)

# pstack 962
962:    /usr/lib/sendmail -Ac -q15m
 feeb82c5 pause    ()
 08086908 main     (3, 8047dc8, 8047dd8, 8047dbc) + 4220
 08061d2d _start   (3, 8047e8c, 0, 8047ea2, 0, 8047ea8) + 7d

ptime

Команда аналогичная time (но с использованием микросостояния учета воспроизводимых точности, в отличии от time потомки команды не учитываются), но при использовании параметра ‘-p’ получаем моментальный снимок использования ресурсов (в Solaris 10 нету параметра -p)

# ptime -p 962

real 123:13:34.069463321
user        0.110260335
sys         0.270589948

При использовании параметра ‘-m’ получаем более полную картину.

ptree

команда аналогичная известной утилите pstree (показывает дерево процессов)

# ptree 997
997   screen
  998   /usr/bin/bash
    1019  sudo -s
      1020  /usr/bin/bash
        2544  ptree 997
  1057  /usr/bin/bash
    2519  man pfiles
      2526  /usr/bin/less -ins /tmp/mpIga46e
  2175  /usr/bin/bash
    2181  sudo -s
      2182  /usr/bin/bash
  2498  /usr/bin/bash
    2500  man pmap
      2507  /usr/bin/less -ins /tmp/mpg4aG4e

pwait

Ждёт завершения процесса и выводит его статус. Полезно при использовании скриптов, когда нужно дождаться завершение процесса и проанализировать.

pwdx

Показывает текущую рабочую папку процесса

# pwdx 962
962:    /var/spool/clientmqueue

pargs

Показывает аргументы, в которыми запущен процесс

# pargs 962
962:    /usr/lib/sendmail -Ac -q15m
argv[0]: sendmail: Queue runner@00:15:00 for /var/spool/clientmqueue
argv[1]: <NULL>
argv[2]: @00:15:00 for /var/spool/clientmqueue

preap

Команда поиска и убийства зомби процессов. Принимает список pid’ов, среди которых ищет зомби и убивает их

ppgsz

The ppgsz utility sets the preferred page size for stack, heap, and/or other anonymous segments for the target process(es), that is, the launched cmd or the process(es) in the pid list. ppgsz stops the target process(es) while changing the page size. See memcntl(2).

Послесловие.

Очень неплохой подбор применений данным утилитам описан так же здесь

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *

Домашняя страничка Andy
Записки молодого админа
Самостоятельная подготовка к Cisco CCNA
Самостоятельная подготовка к Cisco CCNP
Powered by Muff