Добрый день, сталкивался ли кто либо с получением информации, о children процессов имея на руках тока parent процесс?
Интересует информация как это сделать из user-mode. Спасибо.
$ pstree -p $$
sh(5915)---pstree(5916)
$ _
>$ pstree -p $$
>sh(5915)---pstree(5916)
>$ _Отлично, но можно ли это сделать не используя Perl (пишу на Си)
>>$ pstree -p $$
>>sh(5915)---pstree(5916)
>>$ _
>
>Отлично, но можно ли это сделать не используя Perl (пишу на Си)Я буду удивлён, если исходники pstree на Перле :)
P.S. 99%, что всё что можно сделать на Перле можно сделать и на Си (а вот обратное не всегда верно).
>>>$ pstree -p $$
>>>sh(5915)---pstree(5916)
>>>$ _
>>
>>Отлично, но можно ли это сделать не используя Perl (пишу на Си)
>
>Я буду удивлён, если исходники pstree на Перле :)
>
>P.S. 99%, что всё что можно сделать на Перле можно сделать и
>на Си (а вот обратное не всегда верно).Думаю, я тогда Вас удивлю , исходники тут - http://www.tonns.org/ptree/ , написаны на perl, работают, "тупой" переборкой /proc . Переборку писать не хочу, хотя там один файл всего обрабатывать, но все же....
>>>>$ pstree -p $$
>>>>sh(5915)---pstree(5916)[...]
>Думаю, я тогда Вас удивлю , исходники тут - http://www.tonns.org/ptree/ , написаны
>на perl, работают, "тупой" переборкой /proc ."pstree" != "ptree"
;-)
>P.S. 99%, что всё что можно сделать на Перле можно сделать и на Си (а вот обратное не всегда верно).100%
Получить от пользователя имя глобальной переменной и вывести ее тип и содержимое. Задача конечно умозрительная, но в 1% входит, так что удачи на C.
Задача вообще некорректная. Переменные существуют внутри процесса и смотреть на них снаружи никому не нужно ни при каких обстоятельствах (кроме отладки, конечно).
И тем не менее, dlopen(NULL,...) + dlsym(...).
Решение тоже некорректное, с тем же успехом можно было использовать какую либо реализацию хешей(именованные массивы) и сделать вид что элементы хеша и есть переменные. Я думаю вы прекрасно поняли, что пример намекал на различия между интерпретируемыми и компилируемыми языками. Можно придумать целый ряд задач с более жесткими условиями, которые решаются на интерпретируемых(по крайней мере на некоторых), но не на компилируемых языках. Так что все-таки 99%, а не 100%.
> Я думаю вы прекрасно поняли, что пример намекал на различия между интерпретируемыми и компилируемыми языками.Да. Теперь ваша очередь понять, на что я намекал :)
Вот я написал программу на C, скомпилировал и дал вам. Как вы будете проверять, корректно ли она решает вашу задачу?
Программа - это преобразователь информации, получающий и отдающий данные посредством определённых "побочных эффектов" (системных вызовов). В вашей задаче есть малюсенькое упущение - не определено требуемое преобразование.
А так у вас получилась задача "написать программу на перле" и вы предлагаете решить её на C.
>Отлично, но можно ли это сделать не используя 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 SmallPSmisc 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, если уж так "надо", и дурной постановщик задачи кодеру покоя не даёт.