2015-09-21 1 views
1

Работа - это конвейер процессов. После того, как я выполнить командную строку, например, sleep 42 &, терминал даст мне некоторую информацию, как этотВ чем разница между заданием pid и идентификатором процесса в * nix?

[1] 31562 

Это 31562 «задания ПИД-регулятора» этой работы? Это то же самое, что и процесс команды ls?

И если у меня есть команда с трубой, будет создано более одного процесса, то задание pid такое же, как идентификатор процесса первого процесса конвейера?

ответ

1

Работа - это трубопровод процессов.

Не обязательно. Хотя в большинстве случаев задание состоит из конвейера процессов, оно может быть одной командой или может быть набором команд, разделенных &&. Например, это может создать работу с несколькими процессами, которые не соединены трубопроводом:

cat && ps u && ls -l && pwd & 

Теперь, что из пути, давайте перейдем к интересному.

Это 31562 «job pid» этой работы? Это то же самое, что и процесс команды ls?

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

Номер 31562 - это идентификатор группы процессов группы процессов, выполняющей задание. В оболочках UNIX/Linux используются группы процессов: группа процессов представляет собой набор процессов, которые каким-то образом связаны (часто по линейному конвейеру, но, как упоминалось ранее, необязательно). В любой момент вы можете иметь 0 или более фоновых групп процессов и не более одной группы процессов переднего плана (оболочка управляет тем, какие группы находятся в фоновом режиме и находится на переднем плане с tcsetpgrp(3)).

Группа процессов идентифицируется идентификатором группы процессов, который является идентификатором лидера группы процессов. Лидер группы процессов - это процесс, который сначала создал и присоединился к группе, вызвав setpgid(2). Точный процесс, который делает это, зависит от того, как работает оболочка, но в bash, IIRC, это последний процесс в конвейере.

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

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

Смежные вопросы