LINUX.ORG.RU

[Linux] как для процесса получить список дочерних процессов в user space?


0

0

возникла задача получения списка дочерних процессов для процесса в user space. не могу понять как это сделать. Я так понял что какого то системного вызова для этого вообще не существует.

в kernel space это делается просто путем обхода списка с дочерними pid из task_struct

linux/sched.h

struct task_struct {

...

   struct list_head children;   /* list of my children */

...

}

в /proc/{pid} тоже пытался найти информацию но безуспешно

гуглил тоже но все что то не то

есть у кого то такой опыт?

заранее спасибо всем! )

Непонятно - зачем тебе такой геморой? Запоминай пиды, полученные при вызове fork() - вот тебе и список пидов дочерних процессов!

anonymous ()
Ответ на: комментарий от anonymous

да это конечно не очень красивое решение, но так уж сложилось

запоминать при вызове fork тоже не подходит

просто я знаю что эта информация есть в task_struct и вопрос просто в том как ее получить оттуда

salvequick ()
Ответ на: комментарий от mv

да Parent pid проще вызовом узнать getppid()

а списка pid детей в stat нету

да и как мне потом дерево детей строить обходить все процессы и искать те из них к которых ppid совпадает с моим? а потом уровнем ниже...

salvequick ()
Ответ на: комментарий от salvequick

да и как мне потом дерево детей строить обходить все процессы и искать те из них к которых ppid совпадает с моим? а потом уровнем ниже...

Что смущает?

mv ★★★★★ ()
Ответ на: комментарий от mv

смущает то что эта информация уже есть в готовом виде в [b]struct task_struct[/b]

вот я и пытаюсь найти способ ее достать чтобы вручную не строить это дерево

salvequick ()
Ответ на: комментарий от salvequick

вот я и пытаюсь найти способ ее достать чтобы вручную не строить это дерево

Оно уже за тебя в /proc построено.

mv ★★★★★ ()
Ответ на: комментарий от true_admin

посмотрю в ее исходниках как они сделали если они не использовали task_struct и строили дерево сами это будет жестокое разочарование

salvequick ()
Ответ на: комментарий от salvequick

ну вообщем я уже смирился с тем что придется перебирать /proc самому

спасибо!

salvequick ()
Ответ на: комментарий от salvequick

да и каким это образом оно построено ? оно там размазано и раскидано неудобоваримом виде

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

mv ★★★★★ ()
Ответ на: комментарий от salvequick

>если они не использовали task_struct

А как ты внутриядерную структуру собрался юзать в userspace? Расслабься и не думай таких глупостей.

Pavval ★★★★★ ()
Ответ на: комментарий от Pavval

да очень просто, как обычно это делается с помощью системных вызов, с помощью /proc

однако к сожалению возможности в чистом виде получить данные из struct list_head children; как я уже говорил нету

salvequick ()
Ответ на: комментарий от salvequick

использовали task_struct
использовали системные вызовы
использовали /proc

это вообще-то разные вещи.

Pavval ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.