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

Perl中“系统”功能的背后是什么?,第1张

概述我可以认为它将打开一个 shell,执行参数( shell命令)并以标量返回结果. 但是,在Perl脚本中执行 system函数比shell命令更快. 它会在C中调用此命令吗? 如果是,那么它们之间有什么区别 rmdir foo 和 system('rmdir foo'); >两者之间的区别在于第二个将打开(fork)子进程(将是rmdir命令),而第一个将使用API​​进行直接Unix系统调用而 我可以认为它将打开一个 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 directlysystem("rmdir","foo"); # forks off rmdir command directlysystem("rmdir foo > out.txt"); # forks off a shell because of ">"
总结

以上是内存溢出为你收集整理的Perl中“系统”功能背后是什么?全部内容,希望文章能够帮你解决Perl中“系统”功能的背后是什么?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1267213.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存