C 将进程设置为
我有这个功能:C 将进程设置为,c,fork,C,Fork,我有这个功能: void set_background(int n){ int i; for(i=0;i<n;i++) fork(); } void set\u背景(int n){ int i; 对于(i=0;i您需要监视fork()的返回值 void set\u背景(int n) { 对于(int i=0;i
void set_background(int n){
int i;
for(i=0;i<n;i++)
fork();
}
void set\u背景(int n){
int i;
对于(i=0;i您需要监视fork()
的返回值
void set\u背景(int n)
{
对于(int i=0;i
如果您确保“幼稚”的处理永远不会返回,那么您就简化了控制流程。我通过exit(exit_FAILURE);
调用强制实现了这一点
请注意,在原始代码中,父进程在循环的第一次迭代中分叉,因此在循环结束时有两个进程运行。在第二次迭代后,父进程和子进程分叉,因此有4个进程运行。在第n次迭代后,有2N个进程运行。这很少达到预期效果这一版本被称为“叉形炸弹”,它能够使机器屈服。您需要监控来自fork()
的返回值
void set\u背景(int n)
{
对于(int i=0;i
如果您确保“幼稚”的处理永远不会返回,那么您就简化了控制流程。我通过exit(exit_FAILURE);
调用强制实现了这一点
请注意,在原始代码中,父进程在循环的第一次迭代中分叉,因此在循环结束时有两个进程运行。在第二次迭代后,父进程和子进程分叉,因此有4个进程运行。在第n次迭代后,有2N个进程运行。这很少达到预期效果这个循环版本被称为“fork bomb”,它能够让机器屈服。你想像父母一样继续循环吗?让我想起fork()
bomb你想像父母一样继续循环吗?让我想起fork()
bomb出于好奇,为什么EXIT\u FAILURE
而不是EXIT\u SUCCESS
?@DanielFischer:因为我定义了“做幼稚的事情”不应该返回;我通常调用一个我称之为be\u childish()的函数
在代码中的该点,如果返回,则是一个错误。但是,也可以确定be_childish()
代码可以返回,然后退出(exit_SUCCESS);
可以。有时,父代码调用be_parent()
。出于好奇,为什么EXIT\u FAILURE
而不是EXIT\u SUCCESS
?@DanielFischer:因为我定义了“做幼稚的事情”不应该返回;我通常调用一个我称之为be\u childish()的函数
在代码中的该点,如果返回,则是一个错误。但是,也可以确定be_childish()
代码可以返回,然后退出(exit_SUCCESS);可以。有时,父代码调用be_parent()
。
void set_background(int n)
{
for (int i = 0; i < n; i++)
{
pid_t pid;
if ((pid = fork()) < 0)
...process error...
else if (pid == 0)
{
...do childish things...
exit(EXIT_FAILURE);
}
}
/* If here, must be parent */
}