在Perl中,是否可以确定脚本是否在另一个脚本中执行(可能是通过system
或qx
)?
$ cat foo.pl
print "foo";
print "\n" if not $in_qx; # or the like.
如果脚本是通过exec
运行的,我发现这不适用。
我确定system
以fork
运行该过程,我知道fork
可以返回一个可变的值,具体取决于您是在父进程还是子进程中。不确定qx
。
无论如何,我不确定如何在没有实际执行fork
的情况下判断我是否处于fork
过程中。
答案 0 :(得分:6)
所有进程都是从另一个进程分叉的(init除外)。您可以使用POSIX中的open
函数来判断该程序是从qx//
,open2
,open3
还是isatty
运行的,但没有好的方法可以确定你是否在没有查看进程树的情况下由system
运行,即使这样它也会变得模糊(例如system "nohup", "./foo.pl"
将不会调用perl进程它的父母)。
答案 1 :(得分:5)
你可以使用“getppid”(获取父ID)来检查“你的爸爸是谁”。然后检查您的父ID是否是带有pgrep或类似的perl脚本。
答案 2 :(得分:2)
你控制来电者吗?最简单的方法是传递一个参数,例如: --isforked
。