gpt4 book ai didi

linux - 是否可以使用数组版本的 Perls 系统函数立即返回?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:47:34 24 4
gpt4 key购买 nike

是否可以使用 perls system 命令的数组版本(即以第一个元素作为命令并将数组的其余部分作为 cmd 参数的版本)同时生成一个新的使用 Linux 进行处理,以便 system 命令立即返回,例如运行如下命令:

mycmd arg1 arg2 &

我试过使用 system( ('mycmd', 'arg1', 'arg2', '&') ) 但它只是将 & 符号按字面意思解释为第三个参数。

我知道我可以将整个命令作为标量传递给 system 但我特别想知道是否可以使用数组版本,因为此命令的参数将源自用户选项一个 CGI 脚本。

最佳答案

shell 命令的 & 部分告诉 shell 在后台运行进程,因此使用 system 的多参数形式绕过 shell 不会感觉。

解决方案 1:使用 String::ShellQuote 引用。

use String:ShellQuote qw( shell_quote );
system(shell_quote('mycmd', 'arg1', 'arg2').' &');

解决方案 2:使用 shell 插值引用。

system('sh', '-c', '"$@" &', 'sh', 'mycmd', 'arg1', 'arg2');

解决方案 3:自行在后台启动程序。

use IPC::Open3 qw( open3 );

{
open(local *CHILD_IN, '<', '/dev/null') or die $!;
local $SIG{CHLD} = 'IGNORE';
open3(
'<&CHILD_IN', '>&STDOUT', '>&STDERR',
'mycmd', 'arg1', 'arg2',
);
}

关于linux - 是否可以使用数组版本的 Perls 系统函数立即返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28111422/

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