但是,在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中“系统”功能的背后是什么?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)