如何确定脚本是在系统内执行还是在Perl中调用qx?

时间:2009-06-03 20:15:24

标签: perl

在Perl中,是否可以确定脚本是否在另一个脚本中执行(可能是通过systemqx)?

$ cat foo.pl
print "foo";
print "\n" if not $in_qx;  # or the like.

如果脚本是通过exec运行的,我发现这不适用。

我确定systemfork运行该过程,我知道fork可以返回一个可变的值,具体取决于您是在父进程还是子进程中。不确定qx

无论如何,我不确定如何在没有实际执行fork的情况下判断我是否处于fork过程中。

3 个答案:

答案 0 :(得分:6)

所有进程都是从另一个进程分叉的(init除外)。您可以使用POSIX中的open函数来判断该程序是从qx//open2open3还是isatty运行的,但没有好的方法可以确定你是否在没有查看进程树的情况下由system运行,即使这样它也会变得模糊(例如system "nohup", "./foo.pl"将不会调用perl进程它的父母)。

答案 1 :(得分:5)

你可以使用“getppid”(获取父ID)来检查“你的爸爸是谁”。然后检查您的父ID是否是带有pgrep或类似的perl脚本。

答案 2 :(得分:2)

你控制来电者吗?最简单的方法是传递一个参数,例如: --isforked