Существует ли способ считать переменные среды других процессов с помощью Perl и в среде Linux или Соляриса?

Я думаю, вы просто ищете что-то простое?

var myList = new List()
{
    async() => { await Foo.GetBarAsync(); },
    ...
};

Я бы порекомендовал вам вместо этого изменить тип с Action на Func.

111 -async-lambdas /

blockquote>

Для вызова (упрощенно)

foreach (var action in myList)
{
    await action.Invoke();
}

9
задан jac_no_k 6 February 2009 в 01:48
поделиться

5 ответов

Для Соляриса Вы могли попробовать procfs модуль от CPAN. Даже при том, что этот модуль все еще кажется довольно молодым, эта кавычка звучит обнадеживающей:

Brian Farrell отправил очень полезный патч, который обрабатывает контроль argv и среду процессов кроме в настоящее время рабочего процесса.

Я предполагаю, что это - вероятно, просто начальная среда (точно так же, как environ файл в соответствии с Linux), но это, кажется, то, что Вы хотите?

Иначе, хотя я вижу, что Вы говорите, что не хотите разветвляться, простое решение было бы, вероятно, для проворота ~20 строк C для создания небольшой программы, которая просто выкладывает среду на Солярисе как точный эквивалент Linux environ файл. У меня уже есть что-то очень похожее в C. Если Вам интересно, я могу отправить его.

РЕДАКТИРОВАНИЕ (после чтения OpenSolaris pargs.c): буфер среды перераспределен в соответствии с Солярисом, когда изменения среды, таким образом, psinfo указатель может быть недопустимым. Для пуленепробиваемого решения необходимо выследить _environ. Это - все, вероятно, больше стычки, чем Вам нужно... pargs -e <pid> могло бы быть более хорошее укрепляющее средство к UCB ps(1) если Вы действительно идете путем ветвления, все же.

7
ответ дан 4 December 2019 в 06:35
поделиться

В Linux это похоже /proc/<pid>/environ psuedofiles содержат окружать переменную, переданную, когда процесс был создан. Если у Вас есть достаточные полномочия, можно считать их.

Они, кажется, не отслеживают изменения в среде процессов после запуска.

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

Хитрый.

12
ответ дан 4 December 2019 в 06:35
поделиться

Если PS может сделать, он, как Вы говорит, то Ваш ответ может быть найден где-нибудь в исходном коде PS. Это избежало бы порождения нового процесса.

2
ответ дан 4 December 2019 в 06:35
поделиться

Первая вещь, которая прибывает по моему мнению, использует GDB для присоединения к рассматриваемому процессу, и затем просит, чтобы GDB получил среду для Вас. Можно сделать это с "выставочной командой" среды в оболочке GDB.

Похоже, что существует модуль Perl, который может сделать это для Вас, Devel:: GDB. Я еще не попробовал его, но это похоже на Простой Вопрос Программирования для создания Devel:: объект GDB, подключение к процессу, который Вы хотите осмотреть, отправляет "выставочную команду" среды и затем анализирует результаты.

Я действительно должен сказать, хотя..., когда решение - сложный, Вы, вероятно, делаете что-то еще неправильно. Почему Вам нужна среда для вероятностного процесса, так или иначе?

5
ответ дан 4 December 2019 в 06:35
поделиться

Пакет GNU 'binutils' включает утилиту CLI под названием strings . См. http://www.gnu.org/software/binutils/ для получения дополнительной информации.

strings / proc / pid / environment - выводит хороший список переменных среды, очень похожих на env .

10
ответ дан 4 December 2019 в 06:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: