diff options
author | Paul Saab <ps@yahoo-inc.com> | 2000-08-01 08:41:39 -0700 |
---|---|---|
committer | Jarkko Hietaniemi <jhi@iki.fi> | 2000-08-02 01:27:44 +0000 |
commit | 4bc88a62f4d56d50d2cea2bb6c705aea33b892f4 (patch) | |
tree | 281eae336a7a863e88b21a577d5df975bdb22222 /mg.c | |
parent | 00c29ff8bf429b0884d885b7604c1d33f673b0c3 (diff) | |
download | perl-4bc88a62f4d56d50d2cea2bb6c705aea33b892f4.tar.gz |
In new BSDs changes to argv[] do not show up in ps(1) output,
instead one must use setproctitle(). This was already addressed
by change #6457, but the below has a new variant for FreeBSD 4.0
or later, and the matter is also documented more.
Subject: [ID 20000801.007] setting $0 on FreeBSD 4.x does not get reflected in /bin/ps
Message-Id: <20000801154139.A53740@yahoo-inc.com>
p4raw-link: @6457 on //depot/perl: 0c9177abdae6e91f4dfdab2ef3cc817ec901e51eon //depot/metaconfig: efc5abcdbec468dfb20e18acbe3ab6c1cd9e92c3
p4raw-id: //depot/perl@6483
Diffstat (limited to 'mg.c')
-rw-r--r-- | mg.c | 27 |
1 files changed, 24 insertions, 3 deletions
@@ -1999,6 +1999,30 @@ Perl_magic_set(pTHX_ SV *sv, MAGIC *mg) break; #ifndef MACOS_TRADITIONAL case '0': +#ifdef HAS_SETPROCTITLE + /* The BSDs don't show the argv[] in ps(1) output, they + * show a string from the process struct and provide + * the setproctitle() routine to manipulate that. */ + { + s = SvPV(sv, len); +# if __FreeBSD_version >= 400000 + /* The - removes the "perl: " prefix, + * but not the "(perl) suffix from the ps(1) + * output, because that's what ps(1) shows if the + * argv[] is modified. */ + setproctitle("-%s", s, len + 1); +# else /* old FreeBSDs, NetBSD, OpenBSD */ + /* This doesn't really work if you assume that + * $0 = 'foobar'; will wipe out 'perl' from the $0 + * because in ps(1) output the result will be like + * sprintf("perl: %s (perl)", s) + * I guess this is a security feature: + * one (a user process) cannot get rid of the original name. + * --jhi */ + setproctitle("%s", s); +# endif + } +#endif if (!PL_origalen) { s = PL_origargv[0]; s += strlen(s); @@ -2054,9 +2078,6 @@ Perl_magic_set(pTHX_ SV *sv, MAGIC *mg) for (i = 1; i < PL_origargc; i++) PL_origargv[i] = Nullch; } -#ifdef HAS_SETPROCTITLE - setproctitle("%s", SvPV_nolen(sv)); -#endif break; #endif #ifdef USE_THREADS |