fork()之后,for()循环中如何保持运行execve()?
After fork(), how to keep running execve() in for() loop?
这里是一个例子,忽略了错误检查:
int main()
{
pid_t pid = fork();
if(0 == pid)
{
for(int i = 0; i < 5; ++i)
{
char* const args[] = { "/bin/ls", nullptr };
execve("/bin/ls", args, nullptr);
}
}
else if(pid > 0)
{
wait(nullptr);
}
}
如果在fork()之后执行exec(),据我所知,linux不会复制而是覆盖原来的系统。
如果我想像这样在 for() 循环中保留 运行 execve(),我应该怎么做?
exec
(所有不同的形式)将用提供给exec
的可执行文件替换您当前的可执行文件,所以您在分叉中什么都不做代码很重要。您需要围绕 fork
进行循环,或者说服其他程序的作者 运行 为您进行循环。
这里是一个例子,忽略了错误检查:
int main()
{
pid_t pid = fork();
if(0 == pid)
{
for(int i = 0; i < 5; ++i)
{
char* const args[] = { "/bin/ls", nullptr };
execve("/bin/ls", args, nullptr);
}
}
else if(pid > 0)
{
wait(nullptr);
}
}
如果在fork()之后执行exec(),据我所知,linux不会复制而是覆盖原来的系统。
如果我想像这样在 for() 循环中保留 运行 execve(),我应该怎么做?
exec
(所有不同的形式)将用提供给exec
的可执行文件替换您当前的可执行文件,所以您在分叉中什么都不做代码很重要。您需要围绕 fork
进行循环,或者说服其他程序的作者 运行 为您进行循环。