perl脚本有什么方法可以知道谁调用它和/或如何?
是另一个脚本或可执行文件。直接从命令行或cron调度程序。
答案 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
会返回调用脚本的包,文件和行(使用do
或require
)。
$^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
在那里你会看到用户名+参数。