Инструментарий системного администрирования: Методы управления процессами

В статье рассказывается, как получить требуемую информацию о UNIX®-процессах. Знание процессов, которые выполняются в данный момент на системе, необходимо для любого системного администратора. Стандартное отображение списка выполняемых процессов достаточно полезно, но иногда информация в нем отображается в неудобном для чтения формате или не содержит сведений об интересующих администратора процессах. Умение выбирать из списка процессов только интересующие данные упрощает администрирование. В этой статье будет рассмотрено, как настраивать представление списка процессов, чтобы повысить его читабельность, и как обобщать информацию в списке, чтобы получить информацию, которая недоступна другими способами. Также будут рассмотрены некоторые стандартные методы получения информации о процессах, одинаковые для всех UNIX-платформ.

Мартин Браун (Martin C. Brown) , Внештатный автор и консультант компании MCslp, Свободный писатель

Мартин Браун – бывший руководитель IT подразделения с опытом работы в области межплатформенной интеграции. Обладая большим опытом разработчика, он создал динамические сайты для множества крупных клиентов, включая HP и Oracle, и на данный момент является техническим директором ресурса Foodware.net. В настоящее время Мартин в качестве внештатного автора и консультанта сотрудничает с корпорацией Microsoft, работает редактором (LAMP Technologies Editor) журнала LinuxWorld, является видным членом группы AnswerSquad.com. Его перу принадлежат книги на совершенно разные темы: от сертификации Microsoft, компьютеры iMac до программирования открытого исходного кода. При всем этом он продолжает плодотворно работать в области программирования для разных платформ и сред. Связаться с Мартином можно посредством его персонального Web-сайта по адресу http://www.mcslp.com.



30.04.2009

Об этой серии статей

Любой администратор операционной системы UNIX® регулярно применяет стандартные утилиты, команды и сценарии для различных задач. Часть из этих инструментов поставляется вместе с операционной системой, но приемы их эффективного использования администратор накапливает постепенно вместе с опытом работы и желанием системных администраторов облегчить себе жизнь. Этот цикл статей сфокусирован на изучении самых лучших инструментов для UNIX, включая методы упрощения процесса администрирования в гетерогенной среде.

Использование команды ps

Команда ps выводит список выполняющихся процессов. Эта команда существует во всех версиях UNIX и на большинстве ОС работает по схожему механизму – запрашивает у ядра список выполняемых процессов и затем выводит список этих процессов и их свойств, например, потребление памяти, время выполнения и прочие детали.

Утилита ps весьма функциональна, хотя многие администраторы, наверное, пользуются только одной или двумя из возможных опций для получения необходимой им информации. При помощи этой команды можно получить больше информации, если пользоваться встроенными в нее опциями командной строки или комбинировать ps с другими командами при помощи каналов для получения нужной информации.

Получение списка всех процессов

Стандартный вывод команды ps покажет только список процессов, запущенных именно этим пользователем, даже если зайти как пользователь root. В зависимости от того, основан ли UNIX на BSD или AT&T SysV, ОС изменяет основные опции командной строки, которые используются для получения информации либо изменяет уже отображенную информацию. В BSD UNIX выводимая информация составляется из идентификатора процесса (process ID), терминала, статуса, времени (время в секундах выполнения процессора на CPU, а не время начала работы процесса) и исполняемой команды, как показано в листинге 1.

Листинг 1. Список процессов на системе BSD
$ ps
  PID  TT  STAT      TIME COMMAND
  391  p5  S      0:00.24 /bin/bash
 9165  p5  S+     0:00.50 emacs
  476  p6  S      0:01.03 /bin/bash
 9299  p6  S      0:00.09 xterm
 9319  p6  S      0:00.07 xterm
 9423  p6  S      0:00.12 ftp atuin
 9513  p6  R+     0:00.01 ps
 9301  p7  Ss+    0:00.01 /usr/X11R6/bin/luit
 9302  p8  Ss+    0:00.03 bash
 9321  p9  Ss+    0:00.01 /usr/X11R6/bin/luit
 9322  pa  Ss+    0:00.02 bash

Для среды SVR4 будет выведено меньше колонок (не будет статуса процесса), как показано в листинге 2.

Листинг 2. Список процессов на системе UNIX SVR4
$ ps
  PID TTY          TIME CMD
19915 pts/3    00:00:00 bash
29145 pts/3    00:00:00 emacs
32256 pts/3    00:00:00 emacs
26986 pts/3    00:00:00 xterm
31303 pts/3    00:00:00 ftp
31358 pts/3    00:00:00 ps

Для получения списка всех процессов, выполняющихся на системе, необходимо использовать различные опции командной строки, применимые для той UNIX-системы, с которой ведется работа. Для BSD UNIX опция -a выведет список всех процессов, включая процессы самого пользователя. Однако список все еще не будет включать в себя процессы без управляющего терминала (например, те, что были запущены во время загрузки, демоны и те процессы, которые выполняются как часть задачи для cron). Для получения списка всех выполняемых процессов используется опция -A (листинг 3).

Листинг 3. Список всех процессов на системе BSD
$ ps -A
  PID  TT  STAT      TIME COMMAND
    1  ??  S<s    0:15.47 /sbin/launchd
   23  ??  Ss     0:00.02 /sbin/dynamic_pager -F /private/var/vm/swapfile
   27  ??  Ss     0:00.95 kextd
   49  ??  Ss     0:05.17 /usr/sbin/configd
   50  ??  Ss     0:01.89 /usr/sbin/coreaudiod
   51  ??  Ss     0:04.40 /usr/sbin/diskarbitrationd
   52  ??  Ss     0:00.08 /usr/sbin/memberd -x
   53  ??  Ss     0:02.80 /usr/sbin/securityd
   55  ??  Ss    11:03.59 /usr/sbin/notifyd
   57  ??  Ss     0:01.13 /usr/sbin/DirectoryService
...
 8051  p2  S+     0:00.61 ssh root@bear
  292  p3  Ss     0:00.02 bash
  372  p3  S+     0:00.42 ssh admin@atuin
  312  p4  Ss+    0:00.03 bash
  332  p5  Ss     0:00.03 bash
  391  p5  S      0:00.24 /bin/bash
 9165  p5  S+     0:00.50 emacs
  352  p6  Ss     0:00.04 bash
  476  p6  S      0:01.04 /bin/bash
 9299  p6  S      0:00.09 xterm
 9319  p6  S      0:00.07 xterm
 9423  p6  S      0:00.14 ftp atuin
 9520  p6  R+     0:00.01 ps -A
 9301  p7  Ss+    0:00.01 /usr/X11R6/bin/luit
 9302  p8  Ss+    0:00.03 bash
 9321  p9  Ss+    0:00.01 /usr/X11R6/bin/luit
 9322  pa  Ss+    0:00.02 bash

Опция командной строки -A является эквивалентом комбинации опций -a и -x, где опция -a показывает процессы с управляющими терминалами, а -x показывает процессы без управляющего терминала.

Для среды на основе SVR4 следует использовать опцию –e; эта опция показывает все выполняющиеся процессы, вне зависимости от того, есть у них управляющий терминал или нет. Данная опция является эквивалентом опции -A в BSD. Листинг 4 иллюстрирует использование этой опции.

Листинг 4. Список процессов в SVR4
$ ps -e
   PID TTY         TIME CMD
    0 ?          15:24 sched
    1 ?           0:00 init
    2 ?           0:00 pageout
    3 ?           0:00 fsflush
  308 ?           0:00 devfsadm
    7 ?           0:06 svc.star
    9 ?           0:10 svc.conf
  506 ?           0:00 htt_serv
  260 ?           0:00 rpcbind
  259 ?           0:00 cron
   52 ?           0:00 dhcpagen
  282 console     0:00 ttymon
  267 ?           0:00 lockd
  264 ?           0:00 statd
   90 ?           0:00 sysevent
...
  462 ?           0:00 smcboot
  464 ?           0:00 smcboot
  463 ?           0:00 smcboot
  473 ?           0:00 htt
  552 ?           0:00 in.telne
  527 ?           0:00 dmispd
  548 ?           0:01 snmpd

Информация, выводимая всеми этими командами, отличается от столбцов с данными, которые отображаются, но при необходимости можно указать, какую информацию выводить.

Настройка представления данных в списке процессов

Утилита ps содержит множество стандартных наборов столбцов, которые можно отобразить. Например, для SVR4 принято использовать ps -ef для вывода более подробной информации о процессах в списке, включая идентификатор родительного процесса (parent process ID), нагрузку на процессор, время запуска и более подробную информацию о команде, запустившей его (листинг 5).

Листинг 5. Подробная информация
ps -ef
     UID   PID  PPID   C    STIME TTY         TIME CMD
    root     0     0   0 15:56:26 ?          15:24 sched
    root     1     0   0 15:56:26 ?           0:00 /sbin/init
    root     2     0   0 15:56:26 ?           0:00 pageout
    root     3     0   0 15:56:26 ?           0:00 fsflush
    root   308     1   0 15:57:09 ?           0:00 devfsadmd
    root     7     1   0 15:56:29 ?           0:06 /lib/svc/bin/svc.startd
...
    root   562     1   0 15:58:17 ?           0:00 /usr/lib/sendmail -bd -q15m
    root   576   555   1 16:01:47 pts/1       0:00 ps -ef
    root   416     1   0 15:57:14 ?           0:00 /usr/sbin/syslogd
   smmsp   561     1   0 15:58:17 ?           0:00 /usr/lib/sendmail -Ac -q15m
...
    root   552   283   0 15:57:47 ?           0:00 /usr/sbin/in.telnetd
    root   527     1   0 15:57:22 ?           0:00 /usr/lib/dmi/dmispd
    root   548     1   0 15:57:24 ?           0:01 /usr/sfw/sbin/snmpd

Для BSD имеется опция -l, которая предоставляет подробную информацию о каждом процессе, как показано в листинге 6.

Листинг 6. Отображение подробностей о процессе в BSD
$ ps -al
UID PID  PPID CPU PRI NI VSZ   RSS  WCHAN STAT TT TIME    COMMAND
  0 9165  391   0  31  0 57896 6376 -     S+   p5 0:00.50 emacs
501  352  349   0  31  0 27784   52 -     Ss   p6 0:00.04 bash
  0  476  352   0  31  0 27784  600 -     S    p6 0:01.05 /bin/bash
  0 9299  476   0  31  0 44988 1880 -     S    p6 0:00.09 xterm
  0 9319  476   0  31  0 44988 1888 -     S    p6 0:00.07 xterm
  0 9423  476   0  31  0 27504  488 -     S    p6 0:00.15 ftp atuin
  0 9540  476   0  31  0 27384  504 -     R+   p6 0:00.01 ps -axl
  0 9301 9299   0  31  0 27332  452 -     Ss+  p7 0:00.01 /usr/X11R6/bin/luit
  0 9302 9301   0  31  0 27784  888 -     Ss+  p8 0:00.03 bash
  0 9321 9319   0  31  0 27332  452 -     Ss+  p9 0:00.01 /usr/X11R6/bin/luit
  0 9322 9321   0  31  0 27784  888 -     Ss+  pa 0:00.02 bash

Проблема с этими опциями состоит в том, что хотя они предоставляют больше информации, эта информация не всегда полезна и мешает при поиске конкретного процесса.

К счастью, все версии ps также содержат возможность задавать отображаемые столбцы. Можно использовать эту возможность для получения только необходимой информации, а в гетерогенных средах можно создавать стандартизованный вывод для различных UNIX-систем.

Для того чтобы использовать эту особенность, применяется опция -o со списком колонок, отделенных друг от друга запятыми, которые нужно отобразить. Хотя есть различия между наборами доступных для использования столбцов, многие из них одинаковы для всех UNIX-версий. Например, pid, ppid (parent pid), command, RSS (resident set size or memory usage – использование памяти) и столбец приоритетов доступны для всех UNIX ОС.

На практике можно использовать опцию -o для выбора столбцов и для упорядочивания процесса отображения информации. Например, для BSD для получения pid, ppid и command следует использовать -opid,ppid,command, как показано в листинге 7, или -opid,ppid,comm для SVR4, как показано в листинге 8.

Листинг 7. Задание отображаемых столбцов в BSD
$ ps -o pid,ppid,command
  PID  PPID COMMAND
  391   332 /bin/bash
 9165   391 emacs
Листинг 8. Задание отображаемых столбцов в SVR4
$ ps -opid,ppid,comm
  PID  PPID COMMAND
  555   552 -sh
  622   555 ps

После выбора необходимых столбцов можно указать критерий, по которому необходимо отсортировать полученную информацию. По умолчанию ps сортирует список процессов по идентификатору процесса (process ID), но в таком списке трудно отыскать нужную информацию. При поиске процессов, интенсивно потребляющих память, было бы полезным упорядочить список всех процессов по степени использования ими памяти, а не по их идентификатору.

Некоторые версии ps для этой цели имеют соответствующую опцию. BSD-системы сортируют список процессов по уровню использования памяти опции при помощи опции -m или по использованию CPU при помощи опции -r. Многие системы на основе SVR4 не имеют специальной опции для решения этой задачи, но его можно получить, причем оно будет одинаковым для BSD и SVR4, комбинируя ps с sort. Например, для получения списка процессов, отсортированного по степени использования CPU, в среде BSD используется команда, представленная в листинге 9.

Листинг 9. Сортировка по нагрузке на CPU в BSD
$ ps -A -o pid,%cpu,command|sort -n +1
...
358   0.1 ftp
11425   0.1 /bin/bash
28684   0.3 trivial-rewrite -n rewrite -t unix -u
  356   0.4 ssh
  354   0.5 as
23988   1.1 emacs
  136  14.6 cc1plus
26306  23.6 cpp

Для SVR4 необходимо изменить %cpu на pcpu, но в остальном команда идентична (листинг 10).

Листинг 10. Сортировка по нагрузке на CPU в SVR4
$ ps -e -opid,pcpu,comm|sort -n +1
...
    3  0.1 fsflush
  555  0.1 -sh
  627  0.2 sort
  628  0.2 ps

В этих последовательностях команд сначала определяются столбцы, которые нужно отобразить, а затем для получения нужной информации можно отсортировать данные в этих столбцах. Ниже представлены команды для поиска процессов по другим критериям.

Вывод определенных процессов

Как только будет получен список выполняемых процессов, возможно, понадобится показать только некоторые процессы из этого списка. Простой способ сделать это – скомбинировать вывод ps с grep для извлечения необходимой информации. На некоторых UNIX-системах для выполнения этой задачи может быть представлена специальная утилита, например, pgrep, однако зачастую для поиска каких-то определенных команд бывает достаточно применения grep:

$ ps -ef|grep bash

Команда ps также поддерживает отображение процессов согласно более точным критериям, например, идентификатор пользователя (user ID), родительский процесс или управляющий терминал. Например, опция -U выбирает из списка процессы определенного пользователя. Для отображения процессов, принадлежащих администратору, можно воспользоваться командой из листинга 11.

Листинг 11. Просмотр процессов определенного пользователя
$ ps -U root
PID TTY         TIME CMD
    0 ?          15:24 sched
    1 ?           0:00 init
    2 ?           0:00 pageout
    3 ?           0:02 fsflush
  308 ?           0:00 devfsadm
    7 ?           0:06 svc.star
...
  552 ?           0:00 in.telne
  527 ?           0:00 dmispd
  629 pts/1       0:00 ps
  548 ?           0:01 snmpd

Для получения всех процессов, выполняющихся на конкретном терминале, используется опция -t, как показано в листинге 12.

Листинг 12. Список процессов, выполняющихся на конкретном терминале
$ ps -t 3
PID TTY          TIME CMD
19915 pts/3    00:00:00 bash
29145 pts/3    00:00:00 emacs
32256 pts/3    00:00:00 emacs

Как только будет получена эта информация, может возникнуть необходимость произвести некоторые операции с этими процессами.

Отправка сигналов процессам

Одна из команд, которая выполняется наиболее часто после получения списка необходимых процессов, – это команда kill. Она посылает одному или более процессам определенный сигнал. В случае, если демон запустил несколько потоков или дочерних процессов, можно попытаться отправить сигнал родительскому процессу, чтобы тот просигнализировал дочерним процессам. Однако такой метод может не работать с некоторыми демонами и приложениями.

Естественно, что администратор будет стараться не прибегать к ручному завершению процессов. Некоторые UNIX-системы поставляются с инструментом, названным pkill, который может посылать один и тот же сигнал процессам, совпадающим с каким-нибудь шаблоном или удовлетворяющим определенным критериям, например, какой-либо список определенных терминалов, идентификаторов пользователей, идентификаторов групп.

Осуществить отправку сигнала процессам, соответствующим какому-либо заданному шаблону, можно комбинируя команды ps, grep, awk, xargs и kill. Например, для отправки сигнала kill всем процессам со "httpd" в их команде можно использовать:

$ ps -e -opid,command |grep httpd|awk '{print $1}'|xargs kill -9

Команду выше проще понять, если она разбита на несколько частей:

$ ps -e -opid,command

Эта часть выводит список всех выполняющихся процессов (этот пример для SVR4-систем, для BSD-систем используется -A). При этом отображаются только столбцы process ID и command (команда, которая выполняется). Нет необходимости в более детальной информации, поскольку она может представлять собой ненужный текст, который может совпасть с шаблоном для поиска.

$ ps -e -opid,command |grep httpd

Данная команда извлекает только процессы, которые имеют httpd в имени команды (другим выводимым столбцом является process ID):

$ ps -e -opid,command |grep httpd|awk '{print $1}'

При использовании awk осуществляется фильтрация выводимой информации, при этом будет выводиться только первый аргумент – идентификатор процесса (process ID):

$ ps -e -opid,command |grep httpd|awk '{print $1}'|xargs kill -9

Команда xargs берет отделенные друг от друга элементы (отделенные символом конца абзаца, табуляцией, пробелами) и форматирует их как список аргументов на вход другой команде (в данном случае – kill).

Лучше всего поместить эту команду целиком в сценарий с подходящим именем (pkill или killbyname). Можно сделать так, чтобы сценарий принимал два аргумента – сигнал и текст, с которым нужно искать совпадения, а также внести в сценарий код, который позволял бы учитывать ОС, с которой ведется работа(листинг 13).

Листинг 13. Завершение процессов при помощи командной строки
#!/bin/sh

HOSTTYPE=`uname -s`

SIGNAL=$1
STRING=$2

if [ -z "$1" -o -z "$2" ]
then
    echo Usage: $0 signal string
    exit 1
fi

case $HOSTTYPE in
    Darwin|BSD)
    ps -a -opid,command | grep $STRING | awk '{ print $1; }' | xargs kill $SIGNAL
    ;;
    Linux|Solaris|AIX|HP-UX)
    ps -e -opid,command | grep $STRING | awk '{ print $1; }' | xargs kill $SIGNAL
    ;;
esac

Те же приемы могут применяться и в других подобных ситуациях.

Расчет загруженности памяти

Инструмент ps предоставляет два столбца, которые еще не были рассмотрены. RSS-колонка предоставляет "постоянно занимаемую память" ("resident set size") процесса; RSS показывает количество физической памяти, используемой процессом и является индикатором количества оперативной памяти потребляемой данным процессом. Колонка VSZ показывает общее количество памяти, используемое процессом, включая ту память, которая была отведена под внутреннее хранилище данных процесса или отдана под swap-пространство. Наличие этих колонок характерно для распространенных версий ps.

Данные из этих колонок дают четкую картину использования памяти. Если комбинировать команду ps с grep для выбора конкретных процессов и awk для подсчета общих показателей, то можно получить наглядные данные о том, сколько физической и виртуальной памяти использовалось приложением или приложением и его дочерними приложениями.

Например, для определения количества физической и виртуальной памяти, используемой процессом bash, можно применить команду из листинга 14.

Листинг 14. Вычисление степени использования памяти при помощи ps и awk
$ ps -A -o rss,vsz,command|grep bash | \
     awk '{rss += $1; vsz += $2 } END { print "Real: ",rss, "Virtual: ",vsz }'
Real:  4004 Virtual:  305624

Данная методика может пригодиться при диагностике проблем с использованием памяти и использованием пространства для свопинга.

Использование оболочки с возможностью управления задачами

Для системного администратора выполнение двух различных задач одновременно – это обычная ситуация. Также возможно наличие нескольких открытых соединений с сервером – эти соединения могут быть открыты как несколько окон терминала (например, через xterm) или другие терминалы, или удаленный доступ через SSH или Telnet, поэтому могут возникнуть ситуации, когда из активной оболочки понадобится одновременно контролировать или отслеживать несколько процессов.

Все оболочки поддерживают возможность автоматического запуска команды в фоновом режиме путем добавления амперсанда (&) к концу команды. Но иногда может понадобиться поместить интерактивное приложение, например редактор, в фоновый режим, так, чтобы при необходимости можно было выполнить команду в оболочке, а потом вернуться в сеанс редактора.

Возможность контролировать этим способом фоновые процессы называется управлением задачами (job control) и является встроенной возможностью оболочек Korn и C, а также оболочек с открытым исходным кодом типа bash и zsh.

Для базового управления задачами в оболочке, каждый раз при запуске команды на выполнение в фоновом режиме, команде (любая управляющая последовательность для командной строки, например, встроенные сценарии) задается идентификатор задачи (job reference ID).

$ find / -name "core" >/tmp/corelist 2>&1 &
[3] 11957

Список задач, выполняемых в фоновом режиме, можно получить при помощи команды jobs, как показано в листинге 15.

Листинг 15. Использование команды jobs
$ jobs
[1]-  Stopped                 emacs MCSLP/Intranet/News.pm
[2]+  Stopped                 emacs MCSLP/Intranet/Media.pm
[3]   Running                 find / -name "core" >/tmp/corelist 2>&1 &

В этом примере вторая команда emacs отмечена знаком "+". Это означает, что оболочка считает, что эта задача в данный момент активна. Команда find, запущенная перед emacs, не считается активной, поскольку не требует взаимодействия (хотя она и генерирует информацию, она не требует ввода каких-либо дальнейших команд), и, следовательно, не является активным процессом. Знак "-" у первого процесса emacs обозначает, что оболочка считает эту задачу предшествующей активной командой. Обратиться к этим задачам можно при помощи опций %+ и %- соответственно.

Сделать любой из этих процессов активным можно при помощи команды fg, в которой надо указать номер задачи или одну из параметрических строк задачи (%+, %-). Если опустить ссылку, оболочка переключится на текущую активную задачу.

Чтобы приостановить выполнение процесса, необходимо нажать сочетание клавиш Control-Z. Также можно воспользоваться командой:

ftp>
[3]+  Stopped               ftp atuin

Подобный подход должен сработать для большинства команд и приложений. Он также должен работать для наиважнейших простых команд, которые запускаются в оболочке, например, ls или find. Заметьте, что задача отмечена как Stopped (остановлена). Это означает, что выполнение команды было временно прервано. Для переключения команды в фоновый режим работы используется команда bg. Как fg, bg принимает в качестве аргумента ссылку на задачу (job reference) или, по умолчанию без аргументов, переключит в фоновый режим текущий активный процесс. Если команда интерактивная, т.е. требует ввода информации (редактор, FTP и прочее), то при выполнении команды bg будет выведено предупреждение о том, что процесс временно приостановлен (листинг 16).

Листинг 16. Предупреждение о том, что процесс был временно приостановлен
$ bg
[3]+ ftp atuin &
$
[3]+  Stopped

Отметим, что если команда, выполняющаяся в фоновом режиме, генерирует какую-либо информацию в стандартный вывод и этот вывод не был перенаправлен, то информация в этом выводе отобразится на экране, даже если эта команда была переведена в фоновый режим работы посредством управления задачами.

В загруженных средах управление задачами становится одним из простейших путей контроля многочисленных фоновых задач или используется для быстрого перехода из различных редакторов и других команд в активную оболочку (вместо того чтобы запускать новую оболочку).

Гарантированное выполнение процессов в фоновом режиме

Иногда может понадобиться запустить сценарий, утилиту или командную строку на выполнение в фоновом режиме. Однако большинство систем завершит выполнение команды в случае, если пользователь отключится от ОС или выйдет из системы, что будет нежелательно, если требуется только войти в систему, запустить команду и выйти из ОС.

Такое завершение процессов окажется неэффективным, если потом придется перезапускать или повторно инициализировать фоновые процессы или процессы-демоны, которые не делают этого автоматически, или которые зависят от какого-то стартового сценария, который запускает эти процессы и управляет ими. Сценарий MySQL mysqld_safe является примером сценария, работающего подобным образом.

Чтобы предотвратить автоматическое завершение работы приложения в момент выхода пользователя из системы, следует использовать команду nohup как префикс к команде или утилите, которую надо запустить:

$ nohup find/ -name core

Пока вывод команд не будет специально перенаправлен, nohup будет автоматически записывать поток стандартного вывода и стандартной ошибки в файл nohup.out в текущем каталоге.

Вывод можно перенаправить в какой-либо файл используя стандартное перенаправление, но перенаправлять надо одновременно поток вывода и поток ошибки, например:

$ nohup find/ -name core >/tmp/corefind.out 2>&1

Я заметил, что почти автоматически использую nohup для запуска любой команды, чья работа, как я предполагаю, продлится дольше двух-трех минут. Думаю, что моя привычка обусловлена скорее возможностью автоматически перенаправлять вывод, нежели возможностью не прерывать работу приложения в случае разрыва соединения или выхода из системы.


Заключение

Применение приемов, описанных в этой статье, дает возможность быстро найти UNIX-процессы и информацию о них. Если приходится работать в гетерогенной среде, то можно использовать опции для оптимизации представления данных, генерируемых командой, и для легкого поиска нужных процессов.

Ресурсы

Научиться

Получить продукты и технологии

  • IBM trial software: создайте приложение при помощи программного обеспечения, загруженного со страниц сообщества developerWorks.(EN)

Обсудить

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Профиль создается, когда вы первый раз заходите в developerWorks. Информация в вашем профиле (имя, страна / регион, название компании) отображается для всех пользователей и будет сопровождать любой опубликованный вами контент пока вы специально не укажите скрыть название вашей компании. Вы можете обновить ваш IBM аккаунт в любое время.

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=AIX и UNIX
ArticleID=386399
ArticleTitle=Инструментарий системного администрирования: Методы управления процессами
publish-date=04302009