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

Andy Lester andy at petdance.com
Wed Aug 27 11:58:52 PDT 2008


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 at petdance.com => www.petdance.com => AIM:petdance






More information about the Omaha-pm mailing list