[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: linux 2.4.x and /proc/ANYPID/environ - is it emtpy?



On Tue, 8 Jan 2002, Elena Egorova wrote:

 Здравствуйте,

> Здравствуйте,
> 
> Может быть, это проблема perl? Так как у меня действительно получается
> чушь в файле environ, если я использую перловский скрипт, но все нормально,
> если я делаю то же самое на C. Вот пример:
> #include <unistd.h>
> #include <string.h>
> #include <stdio.h>
> 
> int main(int argc, char **argv){
> 		int pid;
> 		pid=(int)getpid();
> 		printf("%d\n\n", (int)pid);
> 		strcpy(argv[0], "something");
> 		sleep(300);
> 		return 0;
> }
> Я не очень хорошо знаю перл, может быть, это и не правильный аналог скрипта?

 Нет, Ваш С-аналог - некорректен. В perl $0 - это имя, под которым показывают
данный процесс программы типа top и ps (очень полезная вещь для мониторинга
состояния всяких демонов, а также чтобы делать killall для всех демонов в
одном состоянии и пр.) (эта практика используется и sendmail'ом тоже - он
меняет имя в соответствии с тем, чем сейчас занимается когда он чем-то
действительно занимается). В С присвоение значения argv[0] естественно не
изменит имя (и вообще, не известен размер буфера указываемого argv[0] - просто
так туда копировать - опасно), под которым процесс показывается ps и top - для
того, чтобы добиться того же эффекта, что и присвоение $0 в перле, в С-шном
аналоге надо вызвать какие-то системно-зависимые и малодокументированные (и
естественно непортабельные на другие юниксы) функции.

 Best regards,
  -Vlad

> On Tue, Jan 08, 2002 at 02:32:58PM +0400, Vlad Harchev wrote:
> 
> >  Я поковырялся еще - да, у меня тоже для большинства процессов
> > /proc/ANYPID/environ содержит правильные данные. Но если процесс - это
> > интепретатор перл, исполняющий скрипт который пррисваивает $0 чего-то - то для
> > этого процесса /proc/ITSPID/environ будет содержать только пробелы.
> >  Такое же поведение имеют и ядро 2.2.18, стоящее у меня на др. машине.
> > Короче, это ошибка в ядре.
> 
> --
> Elena Egorova
> 




Reply to: