Hi there,

I'm seeing something I don't quite understand concerning environment
variables. (This is on an OpenBSD 4.2 amd64 system) I hope someone here
can explain.

Given the following C-program:

#include <stdio.h>
#include <errno.h>
#include <stdlib.h>

int main(int argc, char **argv)
{
 char     *var1  = "FOO=TESTING";
 int      rc;

 sleep(10);

 rc = putenv(var1);
 if (rc < 0) {
   printf("Error inserting <%s> in environ, errno = %d\n",
           var1, errno);
   return 1;
 }

 printf("<%s> inserted in environ\n", var1);
 sleep(10);

 return 0;
}

In another terminal, I start a while loop:

$ while true ; do ps -eww | grep F[O]O ; sleep 1 ; done

When I run this program using "env -i ./a.out", the while loop
in the other terminal doesn't show any output at all. ps doesn't
seem to see FOO being put in the environment.

However, when I start the program using "env -i FOO=BAR ./a.out", the
while loop in the other terminal shows this output, beginning right after
the start of the program:

20571 p2  I+      0:00.00 FOO=BAR (a.out)
20571 p2  I+      0:00.00 FOO=BAR (a.out)
20571 p2  I+      0:00.00 FOO=BAR (a.out)
20571 p2  I+      0:00.00 FOO=BAR (a.out)
20571 p2  I+      0:00.00 FOO=BAR (a.out)
20571 p2  I+      0:00.00 FOO=BAR (a.out)
20571 p2  I+      0:00.00 FOO=BAR (a.out)
20571 p2  I+      0:00.00 FOO=BAR (a.out)
20571 p2  I+      0:00.00 FOO=BAR (a.out)
20571 p2  I+      0:00.00 FOO=BAR (a.out)
20571 p2  I+      0:00.00 FOO=TESTING (a.out)
20571 p2  I+      0:00.00 FOO=TESTING (a.out)
20571 p2  I+      0:00.00 FOO=TESTING (a.out)
20571 p2  I+      0:00.00 FOO=TESTING (a.out)
20571 p2  I+      0:00.00 FOO=TESTING (a.out)
20571 p2  I+      0:00.00 FOO=TESTING (a.out)
20571 p2  I+      0:00.00 FOO=TESTING (a.out)
20571 p2  I+      0:00.00 FOO=TESTING (a.out)
20571 p2  I+      0:00.00 FOO=TESTING (a.out)
20571 p2  I+      0:00.00 FOO=TESTING (a.out)


So ps does show FOO, *and* it shows the value of FOO changing after
ten seconds.

I don't understand this behaviour. On another system (AIX), ps does pick
up newly set environment variables. Is this behaviour implementation
dependent? 

Thanks,
-- 
Jurjen Oskam

Savage's Law of Expediency:
        You want it bad, you'll get it bad.

Reply via email to