如果我有这样的程序:
int i = 0;
int status;
bool result = true;
for(i = 0; i < numfiles; i++) { // LOOP 1
if (fork() == 0) {/* Child */
if (substLines(s1, s2, filenames[i])) {
exit(0);
} else {
exit(2);
}
}
}
for(i = 0; i < numfiles; i++) { // LOOP 2
wait(&status);
....
}
return result;
}
我有以下问题。
LOOP 1
,会发生什么(此时甚至知道LOOP 2)?答案 0 :(得分:2)
如果孩子已经改变了状态,那么这些呼叫会立即返回。否则它们会阻塞,直到子项改变状态或信号处理程序中断调用
所以问题1并不重要
和问题2,答案是否定的。
并发意味着它们同时运行。它需要多核CPU或多台计算机,如分布式系统。
你的程序是多进程的,它只是Parallelism,这意味着它们在CPU的时间表下逐个运行,以获取更多信息:Scheduling_(computing)
答案 1 :(得分:0)
只是@ simon_xia的优秀答案的补充。
被杀或退出的进程变为zombie
,直到其父进程为其调用wait
。是的,这是官方术语。 :-)在僵尸状态下,一切都被清理(内存页面,打开文件,环境等),只保留退出状态或查杀信号编号。