我怎么知道perl脚本是如何启动的?

时间:2010-05-06 20:02:40

标签: perl

perl脚本有什么方法可以知道谁调用它和/或如何?

是另一个脚本或可执行文件。直接从命令行或cron调度程序。

6 个答案:

答案 0 :(得分:16)

帮助跟踪Perl脚本启动方式的工具:

getppid返回父进程ID。然后,您可以使用ps/proc/<pid>获取有关调用过程的更多信息。

$^X :perl解释器的完整路径,可以提供有关如何从shell启动Perl的线索

$0 __FILE__ :从命令行调用的脚本名称以及当前文件名。如果它们一致,则当前文件包含从命令行调用的脚本。

@ARGV :传递给您脚本的命令行参数。使用$^X$0@ARGV,您确切地知道如何从shell启动Perl解释器。

caller :堆栈跟踪信息。如果caller在脚本开头返回undef,那么您位于堆栈的顶部框架,并且您的脚本是从shell调用的。否则caller会返回调用脚本的包,文件和行(使用dorequire)。

$^T :当前Perl脚本启动的时间(自“epoch”以来的秒数),因此您知道何时当前的Perl解释器从shell开始。使用scalar localtime($^T)以更友好的格式查看此值。

答案 1 :(得分:6)

Aviatrix删除了一个答案,他说,“尝试使用命令行参数”。这是一个好主意。依赖于无法控制的事物的程序很难测试。在开发脚本时,您是否真的想从cron运行它以测试“从cron运行”功能?没办法!

因此,不要让你的脚本猜测正在运行它,而是告诉它。然后就不用猜了,然后就不会猜错了(早上三点,毫无疑问)。

可靠的软件是从输入到输出的纯函数。没有充分理由不添加杂质。 (“我希望它从cron运行时随机变化”不是一个很好的理由。)

答案 2 :(得分:3)

在Linux上,您可以查看/proc/<PID>/获取信息,它应该为您提供用于启动它的确切命令,以及用户。

答案 3 :(得分:2)

您可以使用CORE::getppid()查找父进程的ID。

答案 4 :(得分:2)

调用getppid将为您提供脚本的父进程,这就是启动脚本的过程。然后,您可以使用它来查询流程表以确定该流程是什么。

答案 5 :(得分:1)

怎么样:ps auxww

在那里你会看到用户名+参数。