初始进程创建 5 个子进程,并等待它们完成。每个子进程执行 5 次重复,其中在每次重复中
The initial process creates 5 child processes, and waits for them to finish. Each child process performs 5 repetitions, where in each repetition
我对在 c 中使用 fork()
、sleep()
和 wait()
创建进程有点困惑。取下面一段代码:
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/wait.h>
void childProcess(void);
void childProcess(void)
{
for(int i = 0; i < 5; i++)
{
printf("pid: %d email: myemail\n", getpid());
sleep(1);
}
}
int main(int argc, char *argv[])
{
for (int i = 0; i < 5; i++)
{
pid_t childpid;
if ((childpid = fork()) == 0)
{
childProcess();
exit(0);
}
}
int status;
while (wait(&status) > 0)
{
}
return 0;
}
这段代码执行后,执行进程但不去除5个进程的重复。我对这个过程有点困惑。
初始进程创建了 5 个子进程,并等待它们完成。
每个子进程执行5次重复,其中每次重复:
打印消息
pid:PID 电子邮件:USER_EMAIL
其中 PID 是进程的子 PID,而 USER_EMAIL 是电子邮件
通过睡眠调用暂停其操作 1 秒(一次)
父进程在完成时打印子进程的 PID
P.S 我编辑代码
@mixalispetros,你有很多事情要解决,它们都必须一起解决才能让你的代码按预期工作。
exit(0);
for (int i = 0; i < 5; i++) {
wait(NULL);
}
进程结束于 exit(0)
。 wait
从未被调用。
if (fork() == 0) {
// what code runs here? The code in the new process
}
fork()
条件中的 运行 是什么代码? new 进程的代码。哪个进程应该运行wait()
? 原始过程。所以除了在exit
之后,wait()
也在错误的进程中。
移动到哪里? 5 个子进程的 for
循环 wait()
。为什么要 wait()
有 5 个子进程?因为我们已经启动了 所有 5 个子进程 before 我们进入了 5 wait()
s 的循环。
wait()
s 不仅必须发生在 子进程 条件块之外,而且还必须发生在 fork()
.[= 调用的循环之外。 33=]
I'm a bit confused with the creation of processes with fork(), sleep() and wait() in c
令人困惑。经常参考文档以保持直截了当。
记住,fork()
returns twice - in the original process (returning the process ID of the new process), and in the new process (returning 0
). wait()
,会等待下一个子进程退出。
总之,将 wait
循环 放在 子进程 fork()
循环之外。这也会将它移到 child
进程中执行的代码块之外。
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/wait.h>
int main() {
// this loop creates 5 processes
for (int i = 0; i < 5; i++) {
if (fork() == 0) {
printf("Child %d, PID %d\n", i, getpid());
sleep(i);
exit(0);
}
}
// now, all subprocesses were started
// wait for the same number of child processes to end
for (int i = 0; i < 5; i++) {
wait(NULL);
}
}
我对在 c 中使用 fork()
、sleep()
和 wait()
创建进程有点困惑。取下面一段代码:
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/wait.h>
void childProcess(void);
void childProcess(void)
{
for(int i = 0; i < 5; i++)
{
printf("pid: %d email: myemail\n", getpid());
sleep(1);
}
}
int main(int argc, char *argv[])
{
for (int i = 0; i < 5; i++)
{
pid_t childpid;
if ((childpid = fork()) == 0)
{
childProcess();
exit(0);
}
}
int status;
while (wait(&status) > 0)
{
}
return 0;
}
这段代码执行后,执行进程但不去除5个进程的重复。我对这个过程有点困惑。
初始进程创建了 5 个子进程,并等待它们完成。 每个子进程执行5次重复,其中每次重复:
打印消息 pid:PID 电子邮件:USER_EMAIL 其中 PID 是进程的子 PID,而 USER_EMAIL 是电子邮件
通过睡眠调用暂停其操作 1 秒(一次)
父进程在完成时打印子进程的 PID
P.S 我编辑代码
@mixalispetros,你有很多事情要解决,它们都必须一起解决才能让你的代码按预期工作。
exit(0);
for (int i = 0; i < 5; i++) {
wait(NULL);
}
进程结束于 exit(0)
。 wait
从未被调用。
if (fork() == 0) {
// what code runs here? The code in the new process
}
fork()
条件中的 运行 是什么代码? new 进程的代码。哪个进程应该运行wait()
? 原始过程。所以除了在exit
之后,wait()
也在错误的进程中。
移动到哪里? 5 个子进程的 for
循环 wait()
。为什么要 wait()
有 5 个子进程?因为我们已经启动了 所有 5 个子进程 before 我们进入了 5 wait()
s 的循环。
wait()
s 不仅必须发生在 子进程 条件块之外,而且还必须发生在 fork()
.[= 调用的循环之外。 33=]
I'm a bit confused with the creation of processes with fork(), sleep() and wait() in c
令人困惑。经常参考文档以保持直截了当。
记住,fork()
returns twice - in the original process (returning the process ID of the new process), and in the new process (returning 0
). wait()
,会等待下一个子进程退出。
总之,将 wait
循环 放在 子进程 fork()
循环之外。这也会将它移到 child
进程中执行的代码块之外。
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/wait.h>
int main() {
// this loop creates 5 processes
for (int i = 0; i < 5; i++) {
if (fork() == 0) {
printf("Child %d, PID %d\n", i, getpid());
sleep(i);
exit(0);
}
}
// now, all subprocesses were started
// wait for the same number of child processes to end
for (int i = 0; i < 5; i++) {
wait(NULL);
}
}