Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我如何知道perl脚本是如何启动的?_Perl - Fatal编程技术网

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

我如何知道perl脚本是如何启动的?,perl,Perl,perl脚本有没有办法知道是谁调用它和/或如何调用它 它是另一个脚本,还是一个可执行文件。直接从命令行或cron调度程序开始。在linux上,您可以查看/proc/以了解信息,它应该提供用于启动它的确切命令以及用户 怎么样:ps auxww 在那里您将看到用户名+参数。您可以使用CORE::getppid()查找父进程的id。调用将为您提供脚本的父进程,这就是启动脚本的进程。然后,您可以使用它来查询进程表以确定该进程是什么。帮助跟踪Perl脚本是如何启动的工具: 返回父进程id。然后可以使用ps

perl脚本有没有办法知道是谁调用它和/或如何调用它


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

在linux上,您可以查看
/proc/
以了解信息,它应该提供用于启动它的确切命令以及用户

怎么样:ps auxww


在那里您将看到用户名+参数。

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

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

帮助跟踪Perl脚本是如何启动的工具:

返回父进程id。然后可以使用
ps
/proc/
获取有关调用进程的更多信息

:perl解释器的完整路径,它可能提供有关perl是如何从shell启动的线索

\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。如果它们一致,则当前文件包含从命令行调用的脚本

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

:堆栈跟踪信息。如果
caller
在脚本开始时返回
undef
,则您处于堆栈的顶部帧,并且您的脚本是从shell调用的。否则,
caller
返回调用脚本的包、文件和行(使用
do
require


:当前Perl脚本启动的时间(从“纪元”开始以秒为单位),因此您可以知道当前Perl解释器是何时从shell启动的。使用标量本地时间($^T)
以更友好的格式查看此值。

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

因此,与其让你的脚本猜测它的运行来源,不如直接告诉它。这样它就不用猜了,也不会猜错(毫无疑问,凌晨三点)


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

为什么要这样做?从您的示例中,如果希望脚本在以交互方式(在shell上)和非交互方式(cron)运行时表现不同,则需要使用
isatty
。更糟糕的是,如果您试图实现某种访问控制,那么您所做的事情是非常错误的,而且是不安全的。Brian D Foy的modulino方法(通常使用调用者函数来允许将脚本用作模块)也可能会引起兴趣。结合mobrule提到的其他变量和函数,您可以编写一些非常灵活的脚本/模块。