**已关闭。**此问题需要debugging details。当前不接受答案。
编辑问题以包含desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将有助于其他人回答问题。
2天前关闭。
Improve this question
我老板几年前用Perl写了一些代码(我知道这是危险的领域),现在它引起了一个问题-PID更改,因此pidfile不再有效。代码:
exec($0, "-f", "$configfile")
- 我 * 认为可能有一个shell调用涉及到派生$0(可能是克隆),但他1000%肯定没有涉及到shell。对于上面的代码,另一个进程(不同的PID)而不是同一PID中的实际执行程序,是否有其他解释?
顺便说一句
exec("exec", $0, "-f", "$configfile")
运行良好(执行的进程具有与执行函数调用之前相同的PID)。
还有,如果涉及到空壳,我怎么向他证明是这样呢?
2条答案
按热度按时间watbbzwu1#
当你传递多个参数给
system
或exec
时,没有shell被使用。这个约定在Windows上被打破了,在Windows上,如果程序没有shell就不能执行,那么就使用shell。当你使用块形式的
system
或exec
时,没有使用shell,甚至在Windows上也没有。评论中提到
exec
创建了一个新进程,但事实并非如此(Windows之外)。pexxcrt22#
没有fork,因为
exec
接收3个参数。如果LIST中有多个参数,则使用LIST中的参数调用execvp(3