<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Про Линукс. Простым языком &#187; Теория</title>
	<atom:link href="http://www.prolinux.ru/category/theory/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.prolinux.ru</link>
	<description>ProLinux.ru. Про Линукс. Простым языком. События, мысли, теория и практика.</description>
	<lastBuildDate>Sat, 20 Feb 2010 01:56:24 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.3</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Процессы в Linux</title>
		<link>http://www.prolinux.ru/introduction/about-linux-processes/</link>
		<comments>http://www.prolinux.ru/introduction/about-linux-processes/#comments</comments>
		<pubDate>Tue, 20 Mar 2007 04:30:51 +0000</pubDate>
		<dc:creator>gn_serg</dc:creator>
				<category><![CDATA[Введение]]></category>
		<category><![CDATA[Теория]]></category>

		<guid isPermaLink="false">http://www.prolinux.ru/introduction/about-linux-processes/</guid>
		<description><![CDATA[ В жизни обычного пользователя Linux часто встречается термин «процессы». Так что же такое «процесс»?  Попробуем разобраться.
Сухая формулировка говорит нам что процесс это – совокупность программного кода и данных, загруженных в память ЭВМ. На первый взгляд процесс &#8211; это запущенная программа (приложение) или команда. Но это не совсем так. Некоторые приложения могут создавать несколько [...]]]></description>
			<content:encoded><![CDATA[<p align="justify"> В жизни обычного пользователя Linux часто встречается термин «процессы». Так что же такое «процесс»?  Попробуем разобраться.</p>
<p align="justify">Сухая формулировка говорит нам что <em><strong>процесс это – совокупность программного кода и данных, загруженных в память ЭВМ.</strong> </em>На первый взгляд процесс &#8211; это запущенная программа (приложение) или команда. Но это не совсем так. Некоторые приложения могут создавать несколько процессов одновременно.</p>
<p align="justify"> Код процесса не обязательно должен выполняться в текущий момент времени, так как процесс может находиться в состоянии спящего. В этом случае выполнение кода такого процесса приостановлено. Существует всего 3 состояния, в которых может находиться процесс:</p>
<p align="justify"><strong><em>Работающий процесс</em></strong> – в данный момент код процесса выполняется.</p>
<p align="justify"> <strong><em>Спящий процесс</em></strong> – в данный момент код процесса не выполняется в ожидании какого либо события (нажатия клавиши на клавиатуре, поступление данных из сети и т.д.)</p>
<p align="justify"> <strong><em>Процесс-зомби</em></strong> – сам процесс уже не существует, его код и данные выгружены из оперативной памяти, но запись в таблице процессов остается по тем или иным причинам.</p>
<p align="justify"> Каждому процессу в системе назначаются числовые идентификаторы (личные номера) в диапазоне от 1 до 65535 (<strong>PID – Process Identifier – идентификатор процесса</strong>) и идентификаторы родительского процесса (<strong>PPID – Parent Process Identifier – идентификатор родительского процесса</strong>). PID является именем процесса, по которому мы можем адресовать процесс в операционной системе при использовании различных средств просмотра и управления процессами. PPID определяет родственные отношения между процессами, которые в значительной степени определяют его свойства и возможности. Другие параметры, которые необходимы для работы программы, называют “окружение процесса”. Одним из таких параметров является <strong>управляющий терминал</strong> – имя терминального устройства, на которое процесс выводит информацию и с которого информацию получает. Управляющий терминал имеют далеко не все процессы. Процессы, не привязанные к какому-то конкретному терминалу называются “демонами” (daemons). Такие процессы, будучи запущенными пользователем, не завершают свою работу по окончании сеанса, а продолжают работать, так как они не связаны никак с текущим сеансом и не могут быть автоматически завершены. Как правило, с помощью демонов реализуются серверные службы, так например сервер печати реализован процессом-демоном cupsd, а сервер журналирования – syslogd.</p>
<p align="justify">Для просмотра списка процессов в Linux существует команда <strong>ps</strong>. Формат команды следующий:</p>
<p align="justify"><strong>ps</strong> <em>[PID]</em> <em>[options]</em> – просмотр списка процессов. Без параметров ps показывает все процессы, которы были запущены в течение текущей сессии, за исключением демонов. Options может принимать одно из следующих значений или их комбинации:</p>
<p align="justify"> -а или -e – показать все процессы</p>
<p align="justify"> -f – полный листинг</p>
<p align="justify"> -w – показать полные строки описания процессов. Если они превосходят<br />
длину экрана, то перенести описание на следующую строку.</p>
<p align="justify"> Это далеко не все параметры команды ps. Остальные параметры Вы можете узнать, просто набрав man ps.</p>
<p align="justify"> <font face="Nimbus Mono L, monospace"><strong>Пример1:</strong></font></p>
<p align="justify"> <font face="Nimbus Mono L, monospace">[gserg@WEBMEDIA gserg]$ ps</font></p>
<p align="justify"><font face="Nimbus Mono L, monospace">PID TTY          TIME CMD</font></p>
<p align="justify">  <font face="Nimbus Mono L, monospace">3126 pts/2    00:00:00 bash</font></p>
<p align="justify">  <font face="Nimbus Mono L, monospace">3158 pts/2    00:00:00 ps</font></p>
<p align="justify"> <font face="Nimbus Mono L, monospace">[gserg@WEBMEDIA gserg]$_</font></p>
<p align="justify">&nbsp;</p>
<p align="justify"> <font face="Nimbus Mono L, monospace"><strong>Пример2:</strong></font></p>
<p align="justify"> <font face="Nimbus Mono L, monospace">[gserg@WEBMEDIA gserg]$ ps 3126</font></p>
<p align="justify">   <font face="Nimbus Mono L, monospace">PID TTY      STAT   TIME COMMAND</font></p>
<p align="justify">  <font face="Nimbus Mono L, monospace">3126 pts/2    S      0:00 /bin/bash</font></p>
<p align="justify"> <font face="Nimbus Mono L, monospace">[gserg@WEBMEDIA gserg]$_</font></p>
<p align="justify">&nbsp;</p>
<p align="justify"> <font face="Nimbus Mono L, monospace"><strong>Пример3:</strong></font></p>
<p align="justify"> <font face="Nimbus Mono L, monospace">[gserg@WEBMEDIA gserg]$ ps -ef</font></p>
<p align="justify"> <font face="Nimbus Mono L, monospace">UID        PID  PPID  C STIME TTY          TIME CMD</font></p>
<p align="justify"> <font face="Nimbus Mono L, monospace">root         1     0  0 10:01 ?        00:00:03 init [5]</font></p>
<p align="justify"> <font face="Nimbus Mono L, monospace">root         2     1  0 10:01 ?        00:00:00 [keventd]</font></p>
<p align="justify"> <font face="Nimbus Mono L, monospace">root         3     1  0 10:01 ?        00:00:00 [kapmd]</font></p>
<p align="justify"> <font face="Nimbus Mono L, monospace">root         4     1  0 10:01 ?        00:00:00 [ksoftirqd_CPU0]</font></p>
<p align="justify"> <font face="Nimbus Mono L, monospace">root         5     1  0 10:01 ?        00:00:24 [kswapd]</font></p>
<p align="justify"> <font face="Nimbus Mono L, monospace">root         6     1  0 10:01 ?        00:00:00 [bdflush]</font></p>
<p align="justify"> <font face="Nimbus Mono L, monospace">&#8230;</font></p>
<p align="justify"> <font face="Nimbus Mono L, monospace">gserg     3126  3124  0 17:56 pts/2    00:00:00 /bin/bash</font></p>
<p align="justify"> <font face="Nimbus Mono L, monospace">gserg     3160  3126  0 17:59 pts/2    00:00:00 ps -ef</font></p>
<p align="justify"> <font face="Nimbus Mono L, monospace">[gserg@WEBMEDIA gserg]$_</font></p>
<p align="justify">&nbsp;</p>
<p align="justify"> <font face="Nimbus Mono L, monospace"><strong>Пример4:</strong></font></p>
<p align="justify"> <font face="Nimbus Mono L, monospace">[gserg@WEBMEDIA gserg]$ ps -efw</font></p>
<p align="justify"> <font face="Nimbus Mono L, monospace">UID        PID  PPID  C STIME TTY          TIME CMD</font></p>
<p align="justify"> <font face="Nimbus Mono L, monospace">root         1     0  0 10:01 ?        00:00:03 init [5]</font></p>
<p align="justify"> <font face="Nimbus Mono L, monospace">root         2     1  0 10:01 ?        00:00:00 [keventd]</font></p>
<p align="justify"> <font face="Nimbus Mono L, monospace">root         3     1  0 10:01 ?        00:00:00 [kapmd]</font></p>
<p align="justify"> <font face="Nimbus Mono L, monospace">root         4     1  0 10:01 ?        00:00:00 [ksoftirqd_CPU0]</font></p>
<p align="justify"> <font face="Nimbus Mono L, monospace">root         5     1  0 10:01 ?        00:00:24 [kswapd]</font></p>
<p align="justify"> <font face="Nimbus Mono L, monospace">&#8230;&#8230;</font></p>
<p align="justify"> <font face="Nimbus Mono L, monospace">root      1130     1  0 10:02 ?        00:00:00 /usr/sbin/apmd -p 10 -w 5 -W -P /etc/sysconfig/apm-scripts/apmd_proxy</font></p>
<p align="justify"> <font face="Nimbus Mono L, monospace">gserg     3172  3126  0 18:01 pts/2    00:00:00 ps -efw</font></p>
<p align="justify"> <font face="Nimbus Mono L, monospace">[gserg@WEBMEDIA gserg]$_</font></p>
<p align="justify">&nbsp;</p>
<p align="justify">Процессы в ОС Linux обладают теми же правами, которыми обладает пользователь, от чьего имени был запущен процесс.</p>
<p align="justify">На самом деле операционная система воспринимает работающего в ней пользователя как набор запущенных от его имени процессов. Ведь и сам сеанс пользователя открывается в командной оболочке (или оболочке Х) от имени пользователя. Поэтому когда мы говорим “права доступа пользователя к файлу” то подразумеваем “права доступа процессов, запущенных от имени пользователя к файлу”.</p>
<p align="justify">Для определения имени пользователя, запустившего процесс, операционная система использует <strong>реальные идентификаторы пользователя и группы</strong>, назначаемые процессу. Но эти идентификаторы не являются решающими при определении прав доступа. Для этого у каждого процесса существует другая группа идентификаторов – <strong>эффективные</strong>.</p>
<p align="justify">Как правило, реальные и эффективные идентификаторы процессов одинаковые, но есть и исключения. Например, для работы утилиты passwd необходимо использовать идентификатор суперпользователя, так как только суперпользователь имеет права на запись в файлы паролей. В этом случае эффективные идентификаторы процесса будут отличаться от реальных. Возникает резонный вопрос – как это было реализовано?</p>
<p align="justify"> У каждого файла есть набор специальных прав доступа – биты SUID и SGID. Эти биты позволяют при запуске программы присвоить ей эффективные идентификаторы владельца и группы-владельца соответственно и выполнять процесс с правами доступа другого пользователя. Так как файл passwd принадлежит пользователю root и у него установлен бит SUID, то при запуске процесс passwd будет обладать правами пользователя root.</p>
<p align="justify"> Устанавливаются биты SGID и SUID командой chmod:</p>
<p align="justify">chmod u+s filename – установка бита SUID</p>
<p align="justify">chmod g+s filename – установка бита SGID</p>
<p align="justify">&nbsp;</p>
<p align="justify"> Мы с вами рассмотрели понятие процесса, способы отображения процессов и права доступа. Но для комфортной работы в операционной системе этого, согласитесь, мало. Необходимо еще эффективно управлять процессами. А для реализации управления мы сначала рассмотри строение таблицы процессов:</p>
<p align="justify"> Родителем всех процессов в системе является процесс init. Его PID всегда 1, PPID – 0. Всю таблицу процессов можно представить себе в виде дерева, в котором корнем будет процесс init. Этот процесс хоть и не является частью ядра, но выполняет в системе очень важную роль – определяет текущий уровень инициализации системы и следит чтобы были запущены программы, позволяющие пользователю общаться с компьютером (mingetty, X или другие).</p>
<p align="justify"> Процессы, имена которых заключены в квадратные скобки, например “[keventd]” &#8211; это процессы ядра. Эти процессы управляют работой системы, а точнее такими ее частями, как менеджер памяти, планировщик времени процессора, менеджеры внешних устройств и так далее.</p>
<p align="justify"> Остальные процессы являются пользовательскими, запущенными либо из командной строки, либо во время инициализации системы.</p>
<p align="justify"> Жизнь каждого процесса представлена следующими фазами:</p>
<p align="justify"> <strong>Создание процесса</strong> – на этом этапе создается полная копия того процесса, который создает новый. Например, вы запустили из интерпретатора на выполнение команду ls. Командный интерпретатор создает свою полную копию.</p>
<p align="justify"> <strong>Загрузка кода процесса и подготовка к запуску</strong> – копия, созданная на первом этапе заменяется кодом задачи, которую необходимо выполнить и создается ее окружение – устанавливаются необходимые переменные и т.п.</p>
<p align="justify"> <strong>Выполнение процесса</strong></p>
<p align="justify"> <strong>Состояние зомби</strong> – на этом этапе выполнение процесса закончилось, его код выгружается из памяти, окружение уничтожается, но запись в таблице процессов еще остается.</p>
<p align="justify"> <strong>Умирание процесса</strong> – после всех завершающих стадий удаляется запись из таблицы процессов – процесс завершил свою работу.</p>
<p align="justify"> Во время работы процесса, ядро контролирует его состояние, и в случае возникновения непредвиденной ситуации управляет процессом с помощью посылки ему сигнала. <strong>Сигнал</strong> – это простейший способ межпроцессорного (то есть между процессами) взаимодействия. Существует несколько типов сигналов. Для каждого из типов предусмотрено действие по умолчанию. Процесс может воспользоваться действием по умолчанию, или, если у него есть обработчик сигнала, то он может перехватить и обработать или игнорировать сигнал. Сигналы <strong>SIGKILL и SIGSTOP </strong>невозможно ни перехватить, ни игнорировать.</p>
<p align="justify"> По умолчанию возможны несколько действий:</p>
<p align="justify"><strong>игнорировать</strong> – продолжать работу, несмотря на то, что получен сигнал.</p>
<p align="justify"><strong>завершить</strong> – завершить работу процесса.</p>
<p align="justify"><strong>завершить + core</strong> – завершить работу процесса и создать файл в текущем каталоге с именем core, содержащий образ памяти процесса (код и данные).</p>
<p align="justify"><strong>остановить</strong> – приостановить выполнение процесса, но не завершать его работу и не выгружать код из памяти.</p>
<p align="justify">Вот список всех сигналов, существующих в системе на сегодняшний день:</p>
<table border="1" cellpadding="2" cellspacing="0" width="643">
<thead>
<th width="103">
<p align="center"><font face="Nimbus Sans L, sans-serif">Название</font></p>
</th>
<th width="129">
<p align="center"><font face="Nimbus Sans L, sans-serif">Действие по умолчанию</font></p>
</th>
<th width="408">
<p align="center"><font face="Nimbus Sans L, sans-serif">Значение</font></p>
</th>
</thead>
<tbody>
<tr>
<td width="103">
<p align="center"><font face="Nimbus Sans L, sans-serif">SIGABRT</font></p>
</td>
<td width="129">
<p align="center"><font face="Nimbus Sans L, sans-serif">Завершить     + core</font></p>
</td>
<td width="408">
<p align="justify"><font face="Nimbus Sans L, sans-serif"><font size="2">Сигнал     отправляется, если процесс вызывает     системный вызов abort()</font></font></p>
</td>
</tr>
<tr>
<td width="103">
<p align="center"><font face="Nimbus Sans L, sans-serif">SIGTERM</font></p>
</td>
<td width="129">
<p align="center"><font face="Nimbus Sans L, sans-serif">Завершить</font></p>
</td>
<td width="408">
<p align="justify"><font face="Nimbus Sans L, sans-serif"><font size="2">Сигнал обычно представляет своего рода предупреждение, что процесс вскоре будет уничтожен. Этот сигнал позволяет процессу соответствующим образом “подготовиться к смерти” &#8211; удалить временные файлы, завершить необходимые транзакции и т.д. Команда kill по умолчанию отправляет именно этот сигнал.</font></font></p>
</td>
</tr>
<tr>
<td width="103">
<p align="center"><font face="Nimbus Sans L, sans-serif">SIGTTIN</font></p>
</td>
<td width="129">
<p align="center"><font face="Nimbus Sans L, sans-serif">Остановить</font></p>
</td>
<td width="408">
<p align="justify"><font face="Nimbus Sans L, sans-serif"><font size="2">Сигнал генерируется ядром (драйвером управляющего терминала) при попытке процесса фоновой группы осуществить чтение с управляющего терминала. </font>     </font></p>
</td>
</tr>
<tr>
<td width="103">
<p align="center"><font face="Nimbus Sans L, sans-serif">SIGTTOU</font></p>
</td>
<td width="129">
<p align="center"><font face="Nimbus Sans L, sans-serif">Остановить</font></p>
</td>
<td width="408">
<p align="justify"><font face="Nimbus Sans L, sans-serif"><font size="2">Сигнал     генерируется ядром (драйвером     терминала) </font>при попытке процесса     фоновой группы осуществить запись     на управляющий терминал.</font></p>
</td>
</tr>
<tr>
<td width="103">
<p align="center"><font face="Nimbus Sans L, sans-serif">SIGALRM</font></p>
</td>
<td width="129">
<p align="center"><font face="Nimbus Sans L, sans-serif">Завершить</font></p>
</td>
<td width="408">
<p align="justify"><font face="Nimbus Sans L, sans-serif"><font size="2">Сигнал отправляется, когда срабатывает     таймер, ранее установленный.</font></font></p>
</td>
</tr>
<tr>
<td width="103">
<p align="center"><font face="Nimbus Sans L, sans-serif">SIGBUS</font></p>
</td>
<td width="129">
<p align="center"><font face="Nimbus Sans L, sans-serif">Завершить     + core</font></p>
</td>
<td width="408">
<p align="justify"><font face="Nimbus Sans L, sans-serif"><font size="2">Сигнал свидетельствует о некоторой аппаратной ошибке. Обычно этот сигнал отправляется при обращении к недопустимому виртуальному адресу, для которого отсутствует соответствующая физическая страница. </font></font></p>
</td>
</tr>
<tr>
<td width="103">
<p align="center"><font face="Nimbus Sans L, sans-serif">SIGCHLD</font></p>
</td>
<td width="129">
<p align="center"><font face="Nimbus Sans L, sans-serif">Игнорировать</font></p>
</td>
<td width="408">
<p align="justify"><font face="Nimbus Sans L, sans-serif"><font size="2">Сигнал,     посылаемый родительскому процессу     при завершении его потомка.</font></font></p>
</td>
</tr>
<tr>
<td width="103">
<p align="center"><font face="Nimbus Sans L, sans-serif">SIGSEGV</font></p>
</td>
<td width="129">
<p align="center"><font face="Nimbus Sans L, sans-serif">Завершить     + core</font></p>
</td>
<td width="408">
<p align="justify"><font face="Nimbus Sans L, sans-serif"><font size="2">Сигнал свидетельствует об обращении процесса к недопустимому адресу или области памяти, для которой у процесса недостаточно привилегий доступа.</font></font></p>
</td>
</tr>
<tr>
<td width="103">
<p align="center"><font face="Nimbus Sans L, sans-serif">SIGFPE</font></p>
</td>
<td width="129">
<p align="center"><font face="Nimbus Sans L, sans-serif">Завершить     + core</font></p>
</td>
<td width="408">
<p align="justify"><font face="Nimbus Sans L, sans-serif"><font size="2">Сигнал свидетельствует о возникновении особых ситуаций, таких как деление на 0 или переполнение операции с плавающей точкой.</font></font></p>
</td>
</tr>
<tr>
<td width="103">
<p align="center"><font face="Nimbus Sans L, sans-serif">SIGHUP</font></p>
</td>
<td width="129">
<p align="center"><font face="Nimbus Sans L, sans-serif">Завершить</font></p>
</td>
<td width="408">
<p align="justify"><font face="Nimbus Sans L, sans-serif"><font size="2">Сигнал посылается лидеру сеанса, связанному с управляющим терминалом, что терминал отсоединился (потеря линии). Сигнал также посылается всем процессам текущей группы при завершении выполнения лидера. </font></font></p>
<p align="justify"><font face="Nimbus Sans L, sans-serif"><font face="Nimbus Sans L, sans-serif"><font size="2">Этот сигнал иногда используют в качестве простейшего средства межпроцессного взаимодействия. В частности, он применяется для сообщения демонам о необходимости обновить конфигурационную информацию. Причина выбора именно сигнала SIGHUP заключается в том, что демон по определению не имеет управляющего терминала и, соответственно, обычно не получает этого сигнала.</font></font></font></p>
</td>
</tr>
<tr>
<td width="103">
<p align="center"><font face="Nimbus Sans L, sans-serif">SIGILL</font></p>
</td>
<td width="129">
<p align="center"><font face="Nimbus Sans L, sans-serif">Завершить + core</font></p>
</td>
<td width="408">
<p align="justify"><font face="Nimbus Sans L, sans-serif"><font size="2">Сигнал посылается ядром, если процесс     попытается выполнить недопустимую инструкцию.</font></font></p>
</td>
</tr>
<tr>
<td width="103">
<p align="center"><font face="Nimbus Sans L, sans-serif">SIGINT</font></p>
</td>
<td width="129">
<p align="center"><font face="Nimbus Sans L, sans-serif">Завершить</font></p>
</td>
<td width="408">
<p align="justify"><font face="Nimbus Sans L, sans-serif"><font size="2">Сигнал     посылается ядром всем процессам при     нажатии клавиши прерывания (&lt;CTRL&gt;+&lt;C&gt;)</font></font></p>
</td>
</tr>
<tr>
<td width="103">
<p align="center"><font face="Nimbus Sans L, sans-serif">SIGKILL</font></p>
</td>
<td width="129">
<p align="center"><font face="Nimbus Sans L, sans-serif">Завершить</font></p>
</td>
<td width="408">
<p align="justify"><font face="Nimbus Sans L, sans-serif"><font size="2">Сигнал, при получении которого выполнение процесса прекращается. Этот сигнал нельзя не перехватить, не проигнорировать.</font></font></p>
</td>
</tr>
<tr>
<td width="103">
<p align="center"><font face="Nimbus Sans L, sans-serif">SIGPIPE</font></p>
</td>
<td width="129">
<p align="center"><font face="Nimbus Sans L, sans-serif">Завершить</font></p>
</td>
<td width="408">
<p align="justify"><font face="Nimbus Sans L, sans-serif"><font size="2">Сигнал посылается при попытке записи в сокет, получатель данных которого завершил выполнение или закрыл файловый указатель на сокет.</font></font></p>
</td>
</tr>
<tr>
<td width="103">
<p align="center"><font face="Nimbus Sans L, sans-serif">SIGPOLL</font></p>
</td>
<td width="129">
<p align="center"><font face="Nimbus Sans L, sans-serif">Завершить</font></p>
</td>
<td width="408">
<p align="justify"><font face="Nimbus Sans L, sans-serif"><font size="2">Сигнал отправляется при наступлении определенного события для устройства, которое является опрашиваемым (например, получен пакет по сети)</font></font></p>
</td>
</tr>
<tr>
<td width="103">
<p align="center"><font face="Nimbus Sans L, sans-serif">SIGPWR</font></p>
</td>
<td width="129">
<p align="center"><font face="Nimbus Sans L, sans-serif">Игнорировать</font></p>
</td>
<td width="408">
<p align="justify"><font face="Nimbus Sans L, sans-serif"><font size="2">Сигнал генерируется при угрозе потери питания. Обычно он отправляется, когда питание системы переключается на источник бесперебойного питания (UPS). </font></font></p>
</td>
</tr>
<tr>
<td width="103">
<p align="center"><font face="Nimbus Sans L, sans-serif">SIGQUIT</font></p>
</td>
<td width="129">
<p align="center"><font face="Nimbus Sans L, sans-serif">Завершить</font></p>
</td>
<td width="408">
<p align="justify"><font face="Nimbus Sans L, sans-serif"><font size="2">Сигнал     посылается всем процессам текущей     группы при нажатии клавиш &lt;CTRL&gt;+&lt;\&gt;.</font></font></p>
</td>
</tr>
<tr>
<td width="103">
<p align="center"><font face="Nimbus Sans L, sans-serif">SIGSTOP</font></p>
</td>
<td width="129">
<p align="center"><font face="Nimbus Sans L, sans-serif">Остановить</font></p>
</td>
<td width="408">
<p align="justify"><font face="Nimbus Sans L, sans-serif"><font size="2">Сигнал отправляется всем процессам текущей группы при нажатии пользователем клавиш &lt;CTRL&gt;+&lt;Z&gt;. Получение сигнала вызывает останов выполнения процесса.</font></font></p>
</td>
</tr>
<tr>
<td width="103">
<p align="center"><font face="Nimbus Sans L, sans-serif">SIGSYS</font></p>
<p align="center">&nbsp;</p>
</td>
<td width="129">
<p align="center"><font face="Nimbus Sans L, sans-serif">Завершить     + core</font></p>
<p align="center">&nbsp;</p>
</td>
<td width="408">
<p align="justify"><font face="Nimbus Sans L, sans-serif"><font size="2">Сигнал     отправляется ядром при попытке     осуществления процессом недопустимого     системного вызова.</font></font></p>
<p align="justify"><font face="Nimbus Sans L, sans-serif"> </font></p>
</td>
</tr>
<tr>
<td width="103">
<p align="center"><font face="Nimbus Sans L, sans-serif">SIGUSR1</font></p>
</td>
<td width="129">
<p align="center"><font face="Nimbus Sans L, sans-serif">Завершить</font></p>
</td>
<td width="408">
<p align="justify"><font face="Nimbus Sans L, sans-serif"><font size="2">Сигнал     предназначен для прикладных задач     как простейшее средство межпроцессного     взаимодействия.</font></font></p>
</td>
</tr>
<tr>
<td width="103">
<p align="center"><font face="Nimbus Sans L, sans-serif">SIGUSR2</font></p>
</td>
<td width="129">
<p align="center"><font face="Nimbus Sans L, sans-serif">Завершить</font></p>
</td>
<td width="408">
<p align="justify"><font face="Nimbus Sans L, sans-serif"><font size="2">Сигнал     предназначен для прикладных задач     как простейшее средство межпроцессного     взаимодействия.</font></font></p>
</td>
</tr>
</table>
<p align="justify">Немаловажную роль в жизни процессов играет также <strong><em>планировщик</em></strong> – это часть ядра, ответственная за многозадачность системы. Ведь в единицу времени на одном процессоре может выполняться только одна задача. Именно планировщик определяет, какой из запущенных процессов первым будет выполняться, какой вторым. Для этого у каждого процесса существует еще один параметр, называемый <strong>приоритетом.</strong> Для того, чтобы посмотреть приоритет процессов, нам необходимо использовать уже знакомую команду ps с параметром -l (long – расширенный вывод):</p>
<p align="justify"> <font face="Nimbus Mono L, monospace">[gserg@WebMedia gserg]$ ps -l</font></p>
<p align="justify"> <font face="Nimbus Mono L, monospace">F S   UID   PID  PPID  C PRI  NI ADDR    SZ WCHAN  TTY          TIME CMD</font></p>
<p align="justify"> <font face="Nimbus Mono L, monospace">0 S   500  1554  1553  0  75   0    &#8211;  1135 wait4  pts/1    00:00:00 bash</font></p>
<p align="justify"> <font face="Nimbus Mono L, monospace">0 R   500  1648  1554  0  81   0    &#8211;   794 &#8211;      pts/1    00:00:00 ps</font></p>
<p align="justify"> <font face="Nimbus Mono L, monospace">[gserg@WebMedia gserg]$</font></p>
<p align="justify"> Во время своей работы, планировщик в первую очередь ставит на выполнение задачи с меньшим приоритетом. Так, приоритетом 0, обладают только критические системный задачи, а отрицательным приоритетом – процессы ядра. Задачам с большим приоритетом достается меньше процессорного времени и потому, работают они как правило, медленнее, и потребляют намного меньше системных ресурсов.</p>
<p align="justify"> Остается только решить вопрос, а может ли пользователь управлять процессами и системными параметрами? Конечно может! Для этого в Linux есть набор инструментов, позволяющих изменять приоритет процесса, посылать процессам сигналы. О них мы с вами сейчас и поговорим.</p>
<p align="justify">  Первый инструмент – команда nice:</p>
<p align="justify"><strong>nice -n command </strong> &#8211; позволяет изменять приоритет, с которым будет выполняться процесс после запуска. Без указания команды command выдает текущий приоритет работы. n по умолчанию равен 10. Диапазон приоритетов расположен от -20 (наивысший приоритет) до 19 (наименьший). Пример использования команды nice:</p>
<p align="justify"> <font face="Nimbus Mono L, monospace">[gserg@WebMedia gserg]$ less .bashrc &amp;</font></p>
<p align="justify"> <font face="Nimbus Mono L, monospace">[1] 3070</font></p>
<p align="justify"> <font face="Nimbus Mono L, monospace">[gserg@WebMedia gserg]$ ps -efl | grep less</font></p>
<p align="justify"> <font face="Nimbus Mono L, monospace">0 T gserg  3070 3018 0 <strong>80</strong> 0 &#8211; 1004 finish 17:56 pts/3    00:00:00 less .bashrc</font></p>
<p align="justify"> <font face="Nimbus Mono L, monospace">[gserg@WebMedia gserg]$ nice -n 20 less .bashrc &amp;</font></p>
<p align="justify"> <font face="Nimbus Mono L, monospace">[1] 3081</font></p>
<p align="justify"> <font face="Nimbus Mono L, monospace">[gserg@WebMedia gserg]$ ps -efl | grep less</font></p>
<p align="justify"> <font face="Nimbus Mono L, monospace">0 T gserg  3081 3018 0 <strong>99</strong> 19 &#8211; 1003 finish 18:01 pts/3   00:00:00 less .bashrc</font></p>
<p align="justify">Сравнивая цифры приоритета, заметим, что команда less в первом случае выполнялась с приоритетом 80, а во втором – 99. Таким образом, команда nice сделала свое дело – понизила приоритет задачи. Нужно учесть только несколько особенностей выполнения команды nice. Во-первых, команда понизит приоритет насколько это возможно (в примере на 19 вместо 20). Во-вторых – повышать приоритет задачи в системе может только суперпользователь.</p>
<p align="justify"> Еще одна команда:</p>
<p align="justify"> <strong>nohup command</strong> – позволяет процессу продолжить выполнение даже при потере управляющего терминала (SIGHUP). Эту команду выгодно использовать когда необходимо выполнить команду продолжительного действия. Вы запускаете команду и закрываете терминальный сеанс, а она при этом продолжает выполняться. Вывод команды nohup сохранит в файл nohup.out в текущем каталоге.</p>
<p align="justify">Самой часто используемой командой управления процессами можно по праву считать команду kill:</p>
<p align="justify"><strong>kill -SIGNAL pid</strong> – посылает сигнал процессу с идентификатором pid. Если сигнал не указан, команда посылает процессу сигнал SIGTERM. Вот пример ее использования:</p>
<p align="justify"> <font face="Nimbus Mono L, monospace">[gserg@WebMedia gserg]$ less &amp;</font></p>
<p align="justify"> <font face="Nimbus Mono L, monospace">[1] 1352</font></p>
<p align="justify"> <font face="Nimbus Mono L, monospace">[gserg@WebMedia gserg]$ ps</font></p>
<p align="justify">   <font face="Nimbus Mono L, monospace">PID TTY          TIME CMD</font></p>
<p align="justify">  <font face="Nimbus Mono L, monospace">1322 pts/2    00:00:00 bash</font></p>
<p align="justify">  <font face="Nimbus Mono L, monospace">1352 pts/2    00:00:00 less</font></p>
<p align="justify">  <font face="Nimbus Mono L, monospace">1353 pts/2    00:00:00 ps</font></p>
<p align="justify"> <font face="Nimbus Mono L, monospace">[gserg@WebMedia gserg]$ kill -SIGKILL 1352</font></p>
<p align="justify"> <font face="Nimbus Mono L, monospace">[gserg@WebMedia gserg]$ ps</font></p>
<p align="justify">   <font face="Nimbus Mono L, monospace">PID TTY          TIME CMD</font></p>
<p align="justify">  <font face="Nimbus Mono L, monospace">1322 pts/2    00:00:00 bash</font></p>
<p align="justify">  <font face="Nimbus Mono L, monospace">1355 pts/2    00:00:00 ps</font></p>
<p align="justify"> <font face="Nimbus Mono L, monospace">[1]+  Killed                  less</font></p>
<p align="justify">Не менее популярной чем kill командой является killall:</p>
<p align="justify"><strong>killall -s SIGNAL</strong> процесс – посылает сигнал всем процессам с именем процесс. Если сигнал не указан, посылает SIGTERM.</p>
<p align="justify"> Сигнал для этой команды необходимо указывать без приставки SIG. Для получения соответствия цифрового вида и имени сигнала используется опция -l команды killall. Вот пример ее использования:</p>
<p align="justify"> <font face="Nimbus Mono L, monospace">[gserg@WebMedia gserg]$ less ./.bashrc&amp;</font></p>
<p align="justify"> <font face="Nimbus Mono L, monospace">[1] 1374</font></p>
<p align="justify"> <font face="Nimbus Mono L, monospace">[gserg@WebMedia gserg]$ less ./.bashrc&amp;</font></p>
<p align="justify"> <font face="Nimbus Mono L, monospace">[2] 1375</font></p>
<p align="justify"> <font face="Nimbus Mono L, monospace">[1]+  Stopped                 less ./.bashrc</font></p>
<p align="justify"> <font face="Nimbus Mono L, monospace">[gserg@WebMedia gserg]$ less ./.bashrc&amp;</font></p>
<p align="justify"> <font face="Nimbus Mono L, monospace">[3] 1376</font></p>
<p align="justify"> <font face="Nimbus Mono L, monospace">[2]+  Stopped                 less ./.bashrc</font></p>
<p align="justify"> <font face="Nimbus Mono L, monospace">[gserg@WebMedia gserg]$ ps</font></p>
<p align="justify">   <font face="Nimbus Mono L, monospace">PID TTY          TIME CMD</font></p>
<p align="justify">  <font face="Nimbus Mono L, monospace">1322 pts/2    00:00:00 bash</font></p>
<p align="justify">  <font face="Nimbus Mono L, monospace">1374 pts/2    00:00:00 less</font></p>
<p align="justify">  <font face="Nimbus Mono L, monospace">1375 pts/2    00:00:00 less</font></p>
<p align="justify">  <font face="Nimbus Mono L, monospace">1376 pts/2    00:00:00 less</font></p>
<p align="justify">  <font face="Nimbus Mono L, monospace">1377 pts/2    00:00:00 ps</font></p>
<p align="justify"> <font face="Nimbus Mono L, monospace">[3]+  Stopped                 less ./.bashrc</font></p>
<p align="justify"> <font face="Nimbus Mono L, monospace">[gserg@WebMedia gserg]$ killall -s KILL less</font></p>
<p align="justify"> <font face="Nimbus Mono L, monospace">[1]   Killed                  less ./.bashrc</font></p>
<p align="justify"> <font face="Nimbus Mono L, monospace">[2]-  Killed                  less ./.bashrc</font></p>
<p align="justify"> <font face="Nimbus Mono L, monospace">[3]+  Killed                  less ./.bashrc</font></p>
<p align="justify"> <font face="Nimbus Mono L, monospace">[gserg@WebMedia gserg]$</font></p>
<p align="justify">&nbsp;</p>
<p align="left"><strong><em>Литература:</em></strong></p>
<p align="justify">1. Робачевский А.М. «Операционная система Unix<sup>®</sup>». – СПб.:БВХ – Санкт-Петербург, 1999. – 528 с., ил.</p>
<p align="justify">2. Системная справочная служба Linux Man</p>
]]></content:encoded>
			<wfw:commentRss>http://www.prolinux.ru/introduction/about-linux-processes/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
