in reply to Re: Calling strace from a perl program
in thread Calling strace from a perl program

Interesting. I tried this on my Linux system, and it was not at all as I expected. Long story short:

sub ps_line { my $ps = shift; print join ' ', "$ps:\t", @{ (grep { $_->[0] == $$ } map { [ split ] } `$ps | tail -n +2`)[0] }; print "\n"; } print "\$0 = $0\n"; ps_line( 'ps' ); ps_line( 'ps ww' ); { local( $0 ) = 'nyuck' x 3; print "\$0 = $0\n"; ps_line( 'ps' ); ps_line( 'ps ww' ); } print "\$0 = $0\n"; ps_line( 'ps' ); ps_line( 'ps ww' ); __END__ $0 = ./perlmonks.pl ps: 875 pts/1 00:00:00 perl ps ww: 875 pts/1 S+ 0:00 perl ./perlmonks.pl $0 = nyucknyucknyuck ps: 875 pts/1 00:00:00 perl ps ww: 875 pts/1 S+ 0:00 nyucknyucknyuck $0 = ./perlmonks.pl ps: 875 pts/1 00:00:00 perl ps ww: 875 pts/1 S+ 0:00 ./perlmonks.pl

Replies are listed 'Best First'.
Re^3: Calling strace from a perl program
by pc88mxer (Vicar) on Mar 11, 2008 at 21:39 UTC
    That's very odd. I tried it using this test program:
    #!/usr/bin/perl print "my pid = $$\n"; get_lock(); print "enter return again:"; my $x = <STDIN>; sub get_lock { local($0) = "(acquiring lock)"; print "enter return:"; my $x = <STDIN>; }

    In another terminal I get:

    $ /bin/ps 27940 PID TTY STAT TIME COMMAND 27940 pts/0 S+ 0:00 (acquiring lock) $ /bin/ps 27940 PID TTY STAT TIME COMMAND 27940 pts/0 S+ 0:00 ./d0

    I'm using Ubuntu 7.10.

    Update: Ok, it does seem that you will lose the initial 'perl' from the COMMAND field when $0 is restored, but the script name should still remain. Don't know why that happens, and I also can explain yet your 'ww' output.