加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Perl中“系统”功能的背后是什么?

发布时间:2020-12-15 23:27:42 所属栏目:大数据 来源:网络整理
导读:我可以认为它将打开一个 shell,执行参数( shell命令)并以标量返回结果. 但是,在Perl脚本中执行 system函数比shell命令更快. 它会在C中调用此命令吗? 如果是,那么它们之间有什么区别 rmdir foo 和 system('rmdir foo'); 解决方法 两者之间的区别在于第二个将
我可以认为它将打开一个 shell,执行参数( shell命令)并以标量返回结果.
但是,在Perl脚本中执行 system函数比shell命令更快.
它会在C中调用此命令吗?
如果是,那么它们之间有什么区别

rmdir foo

system('rmdir foo');

解决方法

>两者之间的区别在于第二个将打开(fork)子进程(将是rmdir命令),而第一个将使用API??进行直接Unix系统调用而无需打开进程.打开子进程是昂贵的资源.
> system()调用将始终打开一个子进程来执行,但是,它可以打开一个shell,然后将所需的程序作为自己的子进程分叉(从而导致2个子进程),或者分离程序直接作为儿童过程.

Perl将在系统()调用期间打开shell的选择在perldoc -f system中详细说明.短(而不是100%准确)版本是:

>如果系统调用只有一个参数,并且参数的计算结果为包含shell元字符的字符串,则首先将分叉一个shell.
>如果只有一个参数,则评估为无元字符;或者有一个> 1元素的参数列表,该程序直接绕过shell分叉.

从而:

system("rmdir foo"); # forks off rmdir command directly

system("rmdir","foo"); # forks off rmdir command directly

system("rmdir foo > out.txt"); # forks off a shell because of ">"

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读