URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 7858
[ Назад ]

Исходное сообщение
"Получение pidов children процессов"

Отправлено MIA , 26-Янв-09 13:30 
Добрый день, сталкивался ли кто либо с получением информации, о children процессов имея на руках тока parent процесс?
Интересует информация как это сделать из user-mode. Спасибо.

Содержание

Сообщения в этом обсуждении
"Получение pidов children процессов"
Отправлено Andrey Mitrofanov , 26-Янв-09 13:42 
$ pstree -p $$
sh(5915)---pstree(5916)
$ _

"Получение pidов children процессов"
Отправлено MIA , 26-Янв-09 13:45 
>$ pstree -p $$
>sh(5915)---pstree(5916)
>$ _

Отлично, но можно ли это сделать не используя Perl (пишу на Си)


"Получение pidов children процессов"
Отправлено phpcoder , 26-Янв-09 13:54 
>>$ pstree -p $$
>>sh(5915)---pstree(5916)
>>$ _
>
>Отлично, но можно ли это сделать не используя Perl (пишу на Си)

Я буду удивлён, если исходники pstree на Перле :)

P.S. 99%, что всё что можно сделать на Перле можно сделать и на Си (а вот обратное не всегда верно).



"Получение pidов children процессов"
Отправлено MIA , 26-Янв-09 14:07 
>>>$ pstree -p $$
>>>sh(5915)---pstree(5916)
>>>$ _
>>
>>Отлично, но можно ли это сделать не используя Perl (пишу на Си)
>
>Я буду удивлён, если исходники pstree на Перле :)
>
>P.S. 99%, что всё что можно сделать на Перле можно сделать и
>на Си (а вот обратное не всегда верно).

Думаю, я тогда Вас удивлю , исходники тут - http://www.tonns.org/ptree/ , написаны на perl, работают, "тупой" переборкой /proc . Переборку писать не хочу, хотя там один файл всего обрабатывать, но все же....


"Получение pidов children процессов"
Отправлено phpcoder , 26-Янв-09 14:50 
>>>>$ pstree -p $$
>>>>sh(5915)---pstree(5916)

[...]
>Думаю, я тогда Вас удивлю , исходники тут - http://www.tonns.org/ptree/ , написаны
>на perl, работают, "тупой" переборкой /proc .

"pstree" != "ptree"
;-)


"Получение pidов children процессов"
Отправлено const86 , 27-Янв-09 09:08 
>P.S. 99%, что всё что можно сделать на Перле можно сделать и на Си (а вот обратное не всегда верно).

100%


"Получение pidов children процессов"
Отправлено angra , 27-Янв-09 10:42 
Получить от пользователя имя глобальной переменной и вывести ее тип и содержимое. Задача конечно умозрительная, но в 1% входит, так что удачи на C.

"Получение pidов children процессов"
Отправлено const86 , 27-Янв-09 11:48 
Задача вообще некорректная. Переменные существуют внутри процесса и смотреть на них снаружи никому не нужно ни при каких обстоятельствах (кроме отладки, конечно).
И тем не менее, dlopen(NULL,...) + dlsym(...).

"Получение pidов children процессов"
Отправлено angra , 27-Янв-09 19:00 
Решение тоже некорректное, с тем же успехом можно было использовать какую либо реализацию хешей(именованные массивы) и сделать вид что элементы хеша и есть переменные. Я думаю вы прекрасно поняли, что пример намекал на различия между интерпретируемыми и компилируемыми языками. Можно придумать целый ряд задач с более жесткими условиями, которые решаются на интерпретируемых(по крайней мере на некоторых), но не на компилируемых языках. Так что все-таки 99%, а не 100%.

"Получение pidов children процессов"
Отправлено const86 , 27-Янв-09 22:42 
> Я думаю вы прекрасно поняли, что пример намекал на различия между интерпретируемыми и компилируемыми языками.

Да. Теперь ваша очередь понять, на что я намекал :)
Вот я написал программу на C, скомпилировал и дал вам. Как вы будете проверять, корректно ли она решает вашу задачу?
Программа - это преобразователь информации, получающий и отдающий данные посредством определённых "побочных эффектов" (системных вызовов). В вашей задаче есть малюсенькое упущение - не определено требуемое преобразование.
А так у вас получилась задача "написать программу на перле" и вы предлагаете решить её на C.


"Получение pidов children процессов"
Отправлено Andrey Mitrofanov , 26-Янв-09 14:15 
>Отлично, но можно ли это сделать не используя Perl (пишу на Си)

Перл Вам примерещился.

$ file `which pstree`
/usr/bin/pstree: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.4.1, dynamically linked (uses shared libs), for GNU/Linux 2.4.1, stripped
$ ldd `which pstree`
        linux-gate.so.1 =>  (0xb7fe0000)
        libncurses.so.5 => /usr/lib/libncurses.so.5 (0xb7f8f000)
        libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7e5e000)
        libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0xb7e59000)
        /lib/ld-linux.so.2 (0xb7fe1000)
$ pstree -V
pstree (PSmisc) 22.3
Copyright (C) 1993-2005 Werner Almesberger and Craig Small

PSmisc comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it under
the terms of the GNU General Public License.
For more information about these matters, see the files named COPYING.
$ _

Си - не Си, не знаю, но компилируемый язык точно. Вероятнее всего именно на Си оно и сделано. (Ответ: "можно".)

Изучите требования GNU GPL и переходите к изучению исходников psmisc, если уж так "надо", и дурной постановщик задачи кодеру покоя не даёт.