Вопрос

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

Мой вопрос таков:

Знает ли плата процесса идентификатор своего дочернего процесса?Если да, то как его получить?

Это было полезно?

Решение

Насколько мне известно, у процесса нет явного списка PID своих дочерних элементов, но его можно легко построить, поскольку процесс должен знать, какие дочерние процессы он порождает.Например, вызов fork() в UNIX возвращает дочерний PID в родительском процессе и 0 в дочернем процессе, CreateProcess() в Windows возвращает (IIRC) PID нового созданного процесса.

Другие советы

Когда вы используете fork() в *nix возвращаемое значение — это PID дочернего процесса в родительском процессе и 0 в дочернем процессе.Это один из способов узнать.

Не уверен, что они отслеживают «дерево» порождения процессов, я думаю, это зависит от того, какую ОС вы используете, но поскольку, когда вы убиваете bash (или любую оболочку), все работающие дочерние процессы также уничтожаются, я думаю, что UNIX-подобные системы это делают. следите за этим.

Если вы используете Linux или что-либо, реализующее API-интерфейсы Unix, когда процесс вызывает fork() для создания дочернего процесса, родительский элемент получает дочерний PID в качестве кода возврата или -1, если разветвление не удалось.Дочерний процесс получает нулевой код возврата.

Плата процесса знает идентификатор своего дочернего процесса.

Как мы знаем, Fork() используется для создания процессов. Он не принимает аргументов и возвращает идентификатор процесса. После создания нового дочернего процесса и родительский, и дочерний процессы выполняют следующую инструкцию после fork().Здесь нам нужно отличить родителя от дочернего элемента. Это можно сделать, проверив возвращаемое значение fork().

Если Fork() возвращает отрицательное значение, создание дочернего процесса не удалось.If Fork() возвращает ноль вновь созданному дочернему процессу.If Fork() возвращает положительное значение в качестве идентификатора дочернего процесса родительского процесса.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top