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

Re: [Omaha.pm] $0 = "I am not running";




On Aug 27, 2008, at 1:55 PM, Jay Hannah wrote:

Fascinating. When you set $0 inside a running Perl program, "ps w" and "ps -ef" and some others will report whatever you set. But "ps" won't change...


It's all platform-dependent.  From perldoc perlvar:

       $0      Contains the name of the program being executed.

On some (read: not all) operating systems assigning to $0 modifies the argument area that the "ps" program sees. On some
               platforms you may have to use special "ps" options or a
different "ps" to see the changes. Modifying the $0 is more useful as a way of indicating the current program state than it is for hiding the program you’re running. (Mnemonic: same as
               sh and ksh.)

               Note that there are platform specific limitations on the
maximum length of $0. In the most extreme case it may be
               limited to the space occupied by the original $0.

In some platforms there may be arbitrary amount of padding, for example space characters, after the modified name as shown by "ps". In some platforms this padding may extend all the way to the original length of the argument area, no matter what you do
               (this is the case for example with Linux 2.2).

Note for BSD users: setting $0 does not completely remove "perl" from the ps(1) output. For example, setting $0 to "foobar" may result in "perl: foobar (perl)" (whether both the "perl: " prefix and the " (perl)" suffix are shown depends on your exact BSD variant and version). This is an operating
               system feature, Perl cannot help it.

In multithreaded scripts Perl coordinates the threads so that any thread may modify its copy of the $0 and the change becomes visible to ps(1) (assuming the operating system plays along). Note that the view of $0 the other threads have will not change
               since they have their own copies of it.


--
Andy Lester => andy@petdance.com => www.petdance.com => AIM:petdance