私は開発者よりもサーバー管理者の観点からこれ以上のことに興味があります。実行中のperl実行可能ファイルのソースを確認する
現実世界の例として、私が示したPS AUX INラインを持っていると言う:
usercom 1696 0.1 0.2 34104 4556 ? Ss 07:33 0:20 ./mail
これはperlスクリプトであることを本質的に明らかではありませんが、私はそれが実行しているかを決定することができます」 (他のものに加えて)レンダリング-p 1696" 、lsofを:
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
perl 1693 usercom txt REG 0,49 17326 99846241 /home/virtfs/usercom/usr/local/bin/perl
だから、これはこれは(OpenVZの中に)このユーザーのためのperlインタプリタで実行中のスクリプトであることを私に伝えます。
このスクリプトのcwdを見ると、 "mail"実行可能ファイルが含まれていないディレクトリが作成されます。
質問(サーバ管理者の視点から)現在実行中のperlコードの「起源」を特定するためのいくつかの手法があります。私は$ 0が非常に簡単に操作されるので、実行中のperlスクリプトの "ソース"を絶対に決定する方法は実際にはないということを受け入れるようになりました。さらに、コードをperlにパイプしたり、評価したりすることも可能です。それでも、誰もがperlスクリプトのルートを追う良い方法を知っていますか?
ユーザーが$ 0を "sh test.sh"から "bogusfile.sh"に変更したときはどうしますか? – GoldenNewby
あなたは 'bogus.sh'のpidを見ることができ、同じ情報が利用できます(テストされ、perlスクリプトで検証されます)。その$ pidの 'cwd'に複数のスクリプトがある場合、 'bogus'またはgrepのスクリプトをgrepして、どのスクリプトが '$ 0'(Perlの場合)を変更するかを確認できます。私が何かを逃している場合、私の謝罪。 – Woody2143
もう少し見ました。 '/ proc/$ pid /'に 'sched'、 'stat'、 'status'というファイルにスクリプトの元の名前が含まれています。私は '$ 0'を変更したスクリプトに対してこれをテストしました。 – Woody2143