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

标签 perl

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

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

我意识到如果脚本是通过 exec 运行的,这不适用。 .

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

无论如何,我不确定如何确定我是否在 fork 中ed 过程而不实际执行 fork .

最佳答案

所有进程都是从另一个进程派生出来的(init 除外)。您可以通过 open 判断程序是否运行, qx// , open2 , 或 open3通过使用 isatty函数来自 POSIX ,但是没有好的方法可以确定您是否正在运行 system无需查看进程树,即使如此,它也会变得模糊不清(例如 system "nohup", "./foo.pl" 不会将调用 perl 进程作为其父进程)。

关于perl - 如何确定脚本是在系统中执行还是在 Perl 中的 qx 调用中执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/946959/

相关文章:

perl - 我应该为 Perl 脚本的 shebang 行使用什么?

perl - 我可以在包中注入(inject) perl sub 吗?

perl - 如何从 Perl 将输入输入到 Java 命令中?

perl - 哪些标识符被认为是动态的?

Perl 包模板 'a' 重复

perl - ./script 第 17 行没有这样的文件或目录

arrays - 数组的perl散列

perl - "last"在 Perl 中做什么?

regex - 如何检查 Perl 中的下一行是否为空白?

regex - Perl 正则表达式中的\1 和 $1 有什么区别?