puk*_*puk 3 c fork multiprocessing
大部分时间我遇到展示如何叉,像这样的例子:
main()
{
int pid;
pid = fork();
// child
if (pid == 0)
{
...
}
// Parent
else if (pID > 0)
{
...
}
Run Code Online (Sandbox Code Playgroud)
}
有些人展示了如何分叉2个孩子,就像这样
pid = fork();
// Child
if ( pid==0 )
{
...
}
// Parent
else if ( pid>0 )
{
pid=fork();
// Second child
if ( pid==0 ){
...
}
}
Run Code Online (Sandbox Code Playgroud)
这是我试图分叉5个孩子......
pid = fork();
// Child
if ( pid==0 )
{
...
}
// Parent
else if ( pid>0 )
{
pid=fork();
// Second child
if ( pid==0 ){
...
}
// Parent
else if ( pid>0 )
{
pid=fork();
// Third child
if ( pid==0 ){
...
}
// Parent
else if ( pid>0 )
{
pid=fork();
// Fourth child
if ( pid==0 ){
...
}
// Parent
else if ( pid>0 )
{
pid=fork();
// Fifth child
if ( pid==0 ){
...
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
题:
我的观点是,这是精神错乱.是否有更简洁的方法来循环并创建不同数量的子节点(即通过命令行参数指定)?
注意: 孩子们将自己区分开来是非常重要的(即写下"嗨,我是6号孩子"......)因为我的工作涉及每个过程发信号通知不同的计算机.目前我正在使用信号量和一系列目标计算机.我更想要的是为进程增加indeces 1..N.
使用for循环.每个进程都将获得它自己的循环变量副本.
int pid;
int numKids = 5;
int procNum;
for(procNum = 0; procNum < numKids; procNum++) {
// Note: haven't included error handling...
pid = fork();
if (pid == 0) {
break;
}
}
if (pid == 0) {
// child specific stuff. procNum is set to the "child number"
}
else {
// parent stuff
}
Run Code Online (Sandbox Code Playgroud)