gpt4 book ai didi

perl - Perl 中 'system' 函数的背后是什么?

转载 作者:行者123 更新时间:2023-12-04 21:54:50 26 4
gpt4 key购买 nike

我可以认为它会打开一个shell,执行参数(shell命令)并将结果以标量形式返回。
但是,执行 system Perl 脚本中的函数比 shell 命令快。
它会在 C 中调用这个命令吗?
如果是,有什么区别

rmdir foo


system('rmdir foo');

最佳答案

  • 两者之间的区别在于,第二个将打开(fork)一个子进程(将是 rmdir 命令),而第一个将使用 API 直接进行 Unix 系统调用,而无需打开进程。打开子进程是资源明智。
  • system() call 将始终打开一个子进程来执行,但是,它可能会打开一个 shell,然后将所需的程序 fork 为自己的子进程(从而产生 2 个子进程),或者将程序 fork 为子进程直接地。

    system() 期间 Perl 何时打开 shell 的选择电话拼写为 perldoc -f system .简短(而不是 100% 准确)的版本是:
  • 如果系统调用只有一个参数,并且该参数的计算结果是一个包含 shell 元字符的字符串,那么将首先派生一个 shell。
  • 如果只有一个参数并且计算结果为没有元字符;或者有一个 >1 元素的参数列表,程序是直接绕过 shell fork 的。

  • 因此:
    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 ">"

    关于perl - Perl 中 'system' 函数的背后是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2704345/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com