Онлайн-рабочие станции OnWorks Linux и Windows

Логотип

Бесплатный хостинг в Интернете для рабочих станций

<Предыдущая | Содержание: | Следующая>

Команда -u и -a варианты дают дополнительную информацию. Чтобы узнать о дополнительных параметрах и их функциях, обратитесь к информационным страницам.


В следующем разделе мы увидим, как один процесс может создавать другой.


изображение

4.1.5. Жизнь и смерть процесса


4.1.5.1. Создание процесса


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


После процесса разветвления адресное пространство дочернего процесса перезаписывается новыми данными процесса. Это делается через Exec звонок в систему.


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

так называемые самонастройки процедуры.


Эта схема иллюстрирует механизм fork-and-exec. Идентификатор процесса меняется после процедуры вилки:


Рисунок 4-1. Механизм Fork-and-Exec


изображение


Есть несколько случаев, когда инициализации становится родительским для процесса, в то время как процесс не был запущен инициализации, как мы уже видели в дерево пример. Многие программы, например, демонизировать их дочерние процессы, чтобы они могли продолжать работу, когда родительский процесс останавливается или останавливается. Типичный пример - оконный менеджер; это начинает Xterm процесс, который генерирует оболочку, принимающую команды. Затем оконный менеджер отрицает любую дальнейшую ответственность и передает дочерний процесс в инициализации. Используя этот механизм, можно менять оконные менеджеры, не прерывая работу приложений.


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


изображение

4.1.5.2. Завершение процессов


Когда процесс завершается нормально (он не прерывается или не прерывается иным образом), программа возвращает свой статус выхода к родителю. Этот статус выхода - это число, возвращаемое программой, предоставляющее результаты выполнения программы. Система возврата информации при выполнении задания берет свое начало в языке программирования C, на котором была написана UNIX.


Затем коды возврата могут быть интерпретированы родителем или в сценариях. Значения кодов возврата зависят от программы. Эту информацию обычно можно найти на страницах руководства указанной программы, например GREP команда возвращается -1 если совпадений не обнаружено, может быть напечатано сообщение в строках «Файлы не найдены». Другой пример - встроенная команда Bash правда, который ничего не делает, кроме возврата статуса выхода 0, что означает успех.


изображение


4.1.5.3. Сигналы


Процессы завершаются, потому что они получают сигнал. Есть несколько сигналов, которые вы можете отправить процессу. Использовать убивать команда для отправки сигнала процессу. Команда убивать -l показывает список сигналов. Большинство сигналов предназначены для внутреннего использования системой или для программистов, когда они пишут код. Как пользователю вам потребуются следующие сигналы:


Таблица 4-2. Общие сигналы


Название сигнала

Номер сигнала

Смысл

СИГТЕРМ

15

Завершите процесс упорядоченным образом.

SIGINT

2

Прервите процесс. Процесс может игнорировать этот сигнал.

СИГКИЛЛ

9

Прервите процесс. Процесс не может игнорировать этот сигнал.

ПОДПИСАТЬСЯ

1

Для демонов: перечитайте файл конфигурации.

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


изображение

4.1.6. SUID и SGID


Как и было обещано в предыдущей главе, теперь мы более подробно обсудим специальные режимы SUID и SGID. Эти режимы существуют для того, чтобы предоставить обычным пользователям возможность выполнять задачи, которые они обычно не могли бы выполнять из-за жесткой схемы разрешений файлов, используемой в системах на основе UNIX. В идеальной ситуации специальные режимы используются как можно реже, поскольку они включают риски безопасности. Разработчики Linux обычно старались избегать их по возможности. Linux ps версия, например, использует информацию, хранящуюся в / Proc файловая система, доступная каждому, что позволяет избежать раскрытия конфиденциальных системных данных и ресурсов широкой публике. До этого и все еще в старых системах UNIX ps программе необходим доступ к таким файлам, как / dev / mem и / dev / kmem, у которого были недостатки из-за разрешений и прав собственности на эти файлы:


Рита: ~> ls

crw-r -----

-l

/ dev / * мем

Корень 1


кмем


1,


2 августа, 30 22:30 / dev / kmem

crw-r -----

Корень 1

кмем

1,

1 августа, 30 22:30 / dev / mem

Со старыми версиями ps, невозможно было запустить программу от имени обычного пользователя, если к ней не применялись специальные режимы.


изображение

Хотя мы обычно стараемся избегать применения каких-либо специальных режимов, иногда необходимо использовать SUID. Примером может служить механизм смены паролей. Конечно, пользователи захотят сделать это сами, вместо того, чтобы их пароль устанавливал системный администратор. Как известно, имена пользователей и пароли перечислены в / И т.д. / пароль файл, который имеет следующие права доступа и владельцев:


bea: ~> ls -l / etc / passwd

-rw-r - r - 1 корень корня

1267 16 января, 14:43 / etc / passwd

bea: ~> ls -l / etc / passwd

-rw-r - r - 1 корень корня

Тем не менее, пользователи должны иметь возможность изменять свою информацию в этом файле. Это достигается путем предоставления ПАРОЛЬ

специальные разрешения программы:


миа: ~> который passwd

пароль - это / usr / bin / passwd

миа: ~> который passwd

пароль - это / usr / bin / passwd


миа: ~> ls -l / usr / bin / passwd

-rs - x - x 1 корень корень

13476, 7 августа, 06:03 / usr / bin / passwd *

миа: ~> ls -l / usr / bin / passwd

-rs - x - x 1 корень корень

изображение

При вызове ПАРОЛЬ команда будет запущена с использованием прав доступа корень, что позволяет обычному пользователю редактировать файл паролей, принадлежащий системному администратору.


Режимы SGID в файле встречаются не так часто, как SUID, потому что SGID часто включает создание дополнительных групп. Однако в некоторых случаях нам приходится преодолевать эту проблему, чтобы создать элегантное решение (не беспокойтесь об этом слишком много - необходимые группы обычно создаются при установке). Так обстоит дело с записывать и стена программы, которые используются для отправки сообщений на терминалы других пользователей (ttys). В записывать команда пишет сообщение одному пользователю, а стена пишет всем подключенным пользователям.


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


изображение

В приведенном ниже примере пользователь Джо сначала выясняет, к какому терминалу подключен его корреспондент, используя кто команда. Затем он отправляет ей сообщение, используя записывать команда. Также показаны права доступа на записывать программы и на терминалах, занятых принимающим пользователем: ясно, что другие, кроме владельца пользователя, не имеют разрешений на устройстве, за исключением владельца группы, который может писать в него.


Джо: ~> которые пишут

запись - это / usr / bin / write


Джо: ~> ls -l / usr / bin / запись

-rwxr-sr-x 1 корневой терминал

8744 5 дек, 00:55 / usr / bin / write *

Джо: ~> которые пишут

запись - это / usr / bin / write


Джо: ~> ls -l / usr / bin / запись

-rwxr-sr-x 1 корневой терминал


Джо: ~> кто

Дженни tty1

Дженни Птс / 1

Дженни Птс / 2

Дженни Птс / 3

Джо Птс / 0

Янв 23 11: 41

23 янв 12:21 (: 0)

23 янв 12:22 (: 0)

23 янв 12:22 (: 0)

20 янв, 10:13 (lo.callhost.org)

Джо: ~> кто

Дженни tty1

Дженни Птс / 1

Дженни Птс / 2

Дженни Птс / 3

Джо Птс / 0


Джо: ~> ls -l / dev / tty1

crw - w ---- 1 Дженни TT 4,

1 января 23, 11:41 / dev / tty1

Джо: ~> ls -l / dev / tty1

crw - w ---- 1 Дженни TT 4,


Джо: ~> напиши, Дженни, tty1

эй, Дженни, мы пообедаем вместе?

^C

Джо: ~> напиши, Дженни, tty1

эй, Дженни, мы пообедаем вместе?

^C

Информация о пользователе Дженни получает это на своем экране:


Сообщение от [электронная почта защищена] на ptys/1 в 12:36 ... эй, Дженни, пообедаем вместе?

EOF

Сообщение от [электронная почта защищена] на ptys/1 в 12:36 ... эй, Дженни, пообедаем вместе?

EOF

После получения сообщения терминал можно очистить с помощью Ctrl+L комбинация клавиш. Чтобы вообще не получать сообщений (кроме от системного администратора), используйте MESG команда. Чтобы узнать, какие подключенные пользователи принимают сообщения от других, используйте кто -w. Все функции полностью описаны на информационных страницах каждой команды.


изображениеНазвания групп могут отличаться

Групповая схема зависит от распределения. В других дистрибутивах могут использоваться другие имена или другие решения.


изображение


Лучшие облачные вычисления для ОС в OnWorks: