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

Dan*_*nny 3 perl

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

$ cat foo.pl
print "foo";
print "\n" if not $in_qx;  # or the like.
Run Code Online (Sandbox Code Playgroud)

我意识到如果脚本正在运行,这是不适用的exec.

我肯定知道system将进程作为a运行,fork并且我知道fork可以返回一个可变的值,具体取决于您是在父进程还是子进程中.不确定qx.

无论如何,我不确定如何在fork没有实际执行的情况下弄清楚我是否处于编辑过程中fork.

Cha*_*ens 6

所有进程都是从另一个进程分叉的(init除外).您可以排序告诉我们,如果程序运行的open,qx//,open2,或者open3通过使用isatty从功能POSIX,但没有确定,如果你正在运行没有什么好办法system不看过程树,即使如此,它可能会变得复杂(例如,system "nohup", "./foo.pl"不会将调用perl进程作为其父进程).


waz*_*oox 5

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