如何为矩阵的每个元素创建新流程?
How can I create a new process for each element of a matrix?
我想创建一个矩阵,其中每个单元格都包含一个进程(稍后将执行一些必需的操作)。目前,我只想打印显示每个进程的 PID 的矩阵,但是使用 fork () 函数我不断得到一个无限循环。我可能不明白 fork 函数是如何工作的。任何人都可以向我解释它是如何工作的,甚至可以给我一些关于我刚刚介绍的案例的例子吗?提前致谢!
pid_t forking;
for (int i = 0; i < ROW; i++){
for (int j = 0; j < COL; j++){
forking = fork();
exit(EXIT_SUCCESS);
}
}
现在我们可以看到一些代码,我的猜测似乎是正确的。如果您似乎误解了 fork
的工作原理...
如果成功实际上returns两次!一次在父进程中,一次在子进程中。在子进程中你不应该继续循环,而是做一些“工作”然后 exit
。父进程应该继续循环创建进程,然后在最终 reap 所有子进程之前进行自己的处理。
简而言之:
pid_t pid_matrix[ROW][COL];
for (size_t row = 0; row < ROW; ++row)
{
for (size_t col = 0; col < COL; ++col)
{
pid_matrix[row][col] = fork();
if (pid_matrix[row][col] == -1)
{
// Error! Handle it some nice way
}
else if (pid_matrix[row][col] == 0)
{
// In the child process...
// TODO: Do some work here!
printf("In a new child process with pid %d\n", getpid());
exit(EXIT_SUCCESS); // Terminate the child process
// Note that because the child-process have now exited,
// the loop will not continue
}
else
{
// In the parent process
printf("Created a new process with pid %d\n", pid_matrix[row][col]);
// Note that we don't exit or do anything special here
// This will let the loops continue as normal
}
}
}
[如何reap(释放资源)子进程留作reader][=29=的练习]
我想创建一个矩阵,其中每个单元格都包含一个进程(稍后将执行一些必需的操作)。目前,我只想打印显示每个进程的 PID 的矩阵,但是使用 fork () 函数我不断得到一个无限循环。我可能不明白 fork 函数是如何工作的。任何人都可以向我解释它是如何工作的,甚至可以给我一些关于我刚刚介绍的案例的例子吗?提前致谢!
pid_t forking;
for (int i = 0; i < ROW; i++){
for (int j = 0; j < COL; j++){
forking = fork();
exit(EXIT_SUCCESS);
}
}
现在我们可以看到一些代码,我的猜测似乎是正确的。如果您似乎误解了 fork
的工作原理...
如果成功实际上returns两次!一次在父进程中,一次在子进程中。在子进程中你不应该继续循环,而是做一些“工作”然后 exit
。父进程应该继续循环创建进程,然后在最终 reap 所有子进程之前进行自己的处理。
简而言之:
pid_t pid_matrix[ROW][COL];
for (size_t row = 0; row < ROW; ++row)
{
for (size_t col = 0; col < COL; ++col)
{
pid_matrix[row][col] = fork();
if (pid_matrix[row][col] == -1)
{
// Error! Handle it some nice way
}
else if (pid_matrix[row][col] == 0)
{
// In the child process...
// TODO: Do some work here!
printf("In a new child process with pid %d\n", getpid());
exit(EXIT_SUCCESS); // Terminate the child process
// Note that because the child-process have now exited,
// the loop will not continue
}
else
{
// In the parent process
printf("Created a new process with pid %d\n", pid_matrix[row][col]);
// Note that we don't exit or do anything special here
// This will let the loops continue as normal
}
}
}
[如何reap(释放资源)子进程留作reader][=29=的练习]