sid и pid что это
Русские Блоги
(3) Различные идентификаторы процессов: pid, pgid, sid, глобальный pid, локальный pid
Операционная система: Linux
Процессор: arm
Версия ядра: 4.x
Процессы, как системные ресурсы, имеют различные логотипы и являются сложными. Ниже приводится простое объяснение.
1. Начиная с Linux
Только системный вызов gettid вернет pid процесса:
Видно, что при передаче типа __PIDTYPE_TGID в конце возвращается pid его group_leader.
Процессы могут быть организованы в группы процессов (системный вызов setpgrp). Группы процессов могут упростить процесс отправки сигналов всем процессам в группе. Идентификатор группы процессов называется PGID. Все процессы в группе процессов имеют одинаковый PGID, который равен PID лидера группы.
Несколько групп процессов могут быть объединены в группу диалога (с помощью системного вызова setsid), которая может использоваться для программирования терминала. Все процессы в группе разговоров имеют одинаковый SID.
2. Другое
TID это PID на Linux! PID возвращается при выполнении вызова gettid.
Пид родительского процесса.
Командное пространство 3.pid
В настоящее время в ядре Linux поддерживаются следующие пространства имен:
имя | Макроопределение | Карантинный контент |
---|---|---|
Cgroup | CLONE_NEWCGROUP | Cgroup root directory (since Linux 4.6) |
IPC | CLONE_NEWIPC | System V IPC, POSIX message queues (since Linux 2.6.19) |
Network | CLONE_NEWNET | Network devices, stacks, ports, etc. (since Linux 2.6.24) |
Mount | CLONE_NEWNS | Mount points (since Linux 2.4.19) |
PID | CLONE_NEWPID | Process IDs (since Linux 2.6.24) |
User | CLONE_NEWUSER | User and group IDs (started in Linux 2.6.23 and completed in Linux 3.8) |
UTS | CLONE_NEWUTS | Hostname and NIS domain name (since Linux 2.6.19) |
Просмотрите пространство имен, к которому принадлежит процесс:
API, связанный с пространством имен:
Введите пространство имен pid
давным-давно, когда ядро не поддерживает пространство имен pid_name, pid и tgid напрямую хранятся в task_struct.
Пространства имен PID позволяют повторять идентификаторы процессов в разных пространствах имен pid, не влияя друг на друга, и могут быть вложенными. Все новые пространства имен, созданные в текущем пространстве имен, являются дочерними пространствами текущего пространства имен.В родительском пространстве имен можно видеть информацию о процессе во всех дочерних пространствах имен, в то время как дочернее пространство имен не может видеть информацию о процессе в пространстве имен предка или брата.
В настоящее время пространство имен PID может быть вложено до 32 уровней, что определяется макросом MAX_PID_NS_LEVEL в ядре.
Для поддержки pid_namespace ядро добавляет структуры pid и upid. Задачи в структуре pid являются заголовком связанного списка, указывая на узел pid_link в task_struct, который можно использовать для объединения воедино групповых задач процесса и сеансовых задач процесса.
Как найти task_struct по nr в упиде?
Если есть upid высокого уровня, дополнительный upid будет организован после структуры pid за один раз. В соответствии с переменной уровня пространства имен pid_name, в котором находится upid, структуру pid можно найти, используя номер pid в макросе upid и container_of, тем самым найдя task_struct. Процесс заключается в следующем.
Глобальный пид, местный пид
таблица pid_hash
Хеш-таблица хранит данные в структуре с индексированием по ключу (key-indexed). Введите значение для поиска, то есть ключ, чтобы найти соответствующее значение. С помощью хеш-функции введите pid, чтобы найти соответствующую позицию в хеш-таблице. Если позиция в хеш-таблице совпадает, вы можете связать их вместе. Регулируя алгоритм хеш-функции и размер хеш-таблицы, вы можете найти баланс во времени и пространстве.
Здесь используется хеш-функция pid_hashfn, которая сохраняет заголовок списка в pid_hash, указывая на pid_chain в upid. Для разных уровней, но upid с одинаковым номером pid может быть связан с одной и той же строкой pid_chain, поэтому в случае поиска структуры pid по номеру pid необходимо указать пространство имен.
Что означают идентификаторы PID, PPID, SID, PGID, UID, EUID?
Напишите программу на C, которая печатает следующие идентификаторы PID, PPID, SID, PGID, UID, EUID.
Затем задание перешло к вопросу
Что представляет каждый идентификатор?
Я завершил программу, но не нашел адекватных объяснений для идентификаторов.
1 ответ
Ознакомьтесь с этой публикацией SO и первый ответ для здорового объяснения того, для чего они.
3.270 ID родительского процесса
3.343 сессия
Набор групп процессов, созданных для контроля работы. Каждая группа процессов является членом сеанса. Процесс считается участником сеанса, членом которого является его группа процессов. Недавно созданный процесс присоединяется к сеансу его создателя. Процесс может изменить свое членство в сеансе; см. setsid (). В одном сеансе может быть несколько групп процессов.
3.296 Группа процессов
Коллекция процессов, которая разрешает сигнализацию связанных процессов. Каждый процесс в системе является членом группы процессов, которая идентифицируется идентификатором группы процессов. Недавно созданный процесс присоединяется к группе процессов его создателя.
3.297 идентификатор группы процессов
Уникальный положительный целочисленный идентификатор, представляющий группу процессов в течение ее времени жизни.
3.142 Эффективный идентификатор пользователя
Атрибут процесса, который используется при определении различных разрешений, включая права доступа к файлам; см. также идентификатор пользователя.
Sid и pid что это
В телевещании программой (program) или сервисом (service) называется набор логически связанных элементарных потоков данных: аудио-, видео-, телетекст, субтитры, а также дополнительная информация типа расписания передач, названия программы, названия вещателя (провайдера), языков аудиосопровождения, данные для условного доступа к программам и т.п.
Видеопоток в телепрограмме обычно один, реже несколько (например, при трансляции спортивных состязаний с нескольких камер). Если в программе нет ни одного видеопотока, то получается радиопрограмма.
Хотя бы один аудиопоток в программе обычно есть, иногда их бывает несколько, например, на разных языках или, скажем, стерео и многоканальный звук в фильмах. Ни одного аудиопотока в программе бывает редко, хотя теоретически и такой вариант возможен.
Аудио- и видеопотоки (для MPEG2) состоят из PES-пакетов, порезанных на кусочки по 184 байта и разложенных по TS-пакетам.
Таблица состоит из одной или более секций (section). Каждая секция содержит 8-битовый идентификатор таблицы, определяющий её тип, порядковый номер секции и общее количество секций в таблице. Поскольку таблицы могут быть довольно большими, а TS-пакеты могут во время передачи искажаться, такая схема позволяет приёмнику быстрее собрать полную таблицу, дождавшись повторной передачи только нужной секции, а не всей таблицы целиком. [Здесь и далее под словом «приёмник» подразумевается не столько железо, сколько программа, которая управляет его работой]. Для обнаружения искажений при передаче секции снабжаются контрольными суммами (CRC32).
Идентификаторы некоторых таблиц определены в стандартах ISO 13818 и EN 300 468:
Чтобы приёмник, настроившийся на транспондер в произвольный момент времени, смог получить служебные таблицы, они с некоторой периодичностью повторяются в потоке, обычно от нескольких раз в секунду до одного раза в несколько секунд.
Содержимое таблиц может время от времени меняться. Чтобы приёмник мог распознать изменения, предусмотрено две возможности. Во-первых, в таблицах может присутствовать флаг «current/next indicator», указывающий, относится ли таблица к настоящему или к следующему периоду, и позволяющий одновременно передавать две разные версии одной таблицы. Имея данные о следующем периоде, приёмник может заранее произвести некоторые подготовительные действия.
Кроме того, в таблицах есть 5-битовый номер версии, который последовательно увеличивается всякий раз, когда данные в таблице изменяются. По достижении максимального значения номер версии сбрасывается в 0 и далее опять увеличивается. Обнаружив изменение номера версии, приёмник может предпринять какие-нибудь действия, например, автоматически показать пользователю название очередной передачи, или перечитать список каналов транспондера.
Кроме аудио, видео и служебных данных, элементарные потоки могут использоваться для передачи IP-пакетов, данных от интерактивных сервисов и прочего.
Чтобы данные от разных элементарных потоков при мультиплексировании не перепутались, каждому элементарному потоку присваивается уникальный (в пределах мультиплексированного потока) номер, который называется PID (packet identifier). Этот номер указывается в заголовках всех пакетов, относящихся к данному элементарному потоку. По значению этого поля демультиплексор в приёмнике и выделяет нужные элементарные потоки.
PID имеет длину 13 бит и может принимать значения от 0x0000 до 0x1FFF.
Значение 0x1FFF никогда не присваивается никакому реальному потоку и используется, когда в служебных таблицах требуется указать PID потока, а реально поток не существует (что-то типа NULL).
Набор таблиц, необходимый и достаточный для демультиплексирования и показа программ, называется PSI (program specific information). К нему относятся следующие таблицы:
В PAT (program association table), которая всегда передаётся с PID’ом 0x0000, находится список программ в виде номеров программ и номеров их PMT (program map tables). Считав PMT от каждой программы, приёмник получает номера PID’ов, с которыми передаются собственно аудио-, видео- и потоки данных условного доступа к этой программе.
Обычно для выбора и показа программы этих данных достаточно.
Кроме ссылок на PMT, в PAT присутствует также ссылка на NIT (network information table). В NIT описываются параметры транспондеров (частота, модуляция, ширина полосы, и т.п.) и передающихся с них мультиплексированных потоков (номер, идентификатор сети, номера и типы программ и пр.) Это позволяет приёмнику, настроившись хотя бы на один транспондер, автоматически узнать параметры других. Очевидно, для выборки данных о программах и их показа NIT не нужна. Тем не менее, по стандарту она включена в состав PSI.
Кроме вышеперечисленных, существуют и другие таблицы, формально не включены в состав PSI, но позволяют получить дополнительные данные о программах для автоматической группировки и более удобного выбора пользователем. В частности, интерес представляет SDT (service description table, PID=0x0011, table_id=0x42 для текущего потока и 0x46 для других потоков), в которой содержатся названия программ. Без содержащихся в этой таблице данных программы пришлось бы обозначать исключительно числовыми идентификаторами или редактировать названия вручную, что не слишком удобно для пользователя.
Дальнейшие примеры с комментариями помогут несколько прояснить эту запутанную картину.
Ребят, подскажите как сделать триггер?
Необходим триггер для SQL server.
Если запись удаляется (DELETE), или, изменяется поле Country (UPDATE), то надо, чтобы в таблицу History попадала запись.
Но перед этим сверялось по трём полям (PID, SID, Country) нет ли там уже такой схожей записи, чтобы не плодить дубликат.
Пример 1:
Удаляем записи из таблицы Workflow скриптом:
Т.е. в этот момент, прежде чем DELETE, должен работать триггер на проверку.
По второму Delete аналогично проверяем.
Пример 2:
Обновляем записи в таблице Workflow скриптом:
А по второму Delete тут уже мы не проверяем History, т.к. поле Country не апдейтится.
П.С. Сравнение по полю Country надо производить без учета регистра, т.е. ‘poland’ = ‘Poland’ = ‘POLAND’.
Интересует, куда надо вносить скрипт, я так понимаю в раздел Triggers. Ну и сам T-SQL синтаксис верный, потому что я набросал от руки, явно не правильный.
OnTriggerEnter Подскажите пожалуйста, как сделать чтобы при вхождении в триггер отнимались хп?
Например у меня есть триггер и мне надо чтобы когда в него заходит моб (Cube) или игрок (First.
Ребят, подскажите как фиксится ошибка
Сама ошибка: Сервер не найден или недоступен. Убедитесь, что имя экземпляра указано правильно и.
Чем сложна демонизация POSIX
Вот как по мнению Стивенс вы должны демонизировать:
У большинства людей возникает два вопроса к этому коду:
Почему setsid() находится в первом дочернем элементе?
Зачем делать fork() еще раз?
Почему setsid() находится в первом дочернем элементе?
Согласно Стивенсу, setsid() делает три важные вещи:
Процесс становится лидером сеанса нового сеанса, который содержит только вызывающий процесс. (PID = SID)
Процесс становится лидером группы процессов новой группы. (PID = SID = PGID)
Вызов setsid() важен, потому что у демонов не должно быть управляющих терминалов. Если демон запускается из командной оболочки, он подвергается воздействию сигналов от управляющего терминала пользователя, которые могут спровоцировать его неожиданное завершение.
Зачем делать fork() еще раз?
На это есть две причины:
В операционных системах на основе System V второй вызов fork() не позволяет демону когда-либо снова получить управляющий терминал. Единственные широко используемые сегодня варианты System V: AIX, Solaris и HP-UX, так что это не повод использовать fork() второй раз, если вы не ожидаете увидеть одну из этих систем.
Так почему я создаю зомби?
Как создать зомби
Вот как вы можете сделать зомби:
Дайте ему умереть, пока вы живы
Выйдите, не вызывая wait/waitpid для ребенка
При этом я должен отметить, что во всех системах, которые я видел, это не создаст настоящего зомби по следующим причинам:
В некоторых системах есть kernel reaper поток, который ожидает мертвых процессов и выдает их родительский SIGCHLD (OpenBSD).
Как сделать фоновую задачу
Также приглашаем всех желающих на демо-урок «Жизненный цикл программы на C под Windows». На этом вебинаре мы рассмотрим полный жизненный цикл программы на языке C под ОС Windows, начиная от исходного кода и заканчивая загрузкой готового exe-файла. По ходу дела посмотрим «под капот» различным низкоуровневым механизмам операционной системы и тулчейна компиляции и познакомимся с инструментами для анализа программ.