[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