使用 fork 在 c++ 中创建子打印 a-z 和父进程 A-Z

Using fork to create a child print a-z & parent process A-Z in c++

本文关键字:a-z 进程 A-Z 打印 fork c++ 创建 使用      更新时间:2023-10-16

我试图使用fork()创建一个子进程,该进程将以小写字母打印从a到z的字母,父进程将以大写字母打印出字母表。

 #include <unistd.h>
 #include <iostream>
 using namespace std;
int main()
{
cout << "Program Begins" << endl;
char letter;
pid_t pid = fork();
if (pid == 0)
{
    // child process
    for (letter = 'a'; letter <= 'z'; letter++)
    {
        cout<< "child process: " << letter << endl;
    }
}
else if (pid > 0)
{
    // parent process
    for (letter = 'A'; letter <= 'Z'; letter++)
    {
        cout << "parent process: " << letter << endl;
    }
}
else
{
    // fork failed
    cout << "fork failed" << endl;
    return 1;
}
cout << "End of Programn" << endl;
return 0;
}

这段代码打印出了所有的字母,问题是它先完成了所有的child,然后才是parent。我认为它将同时创建两个进程,它们将彼此并行运行,然后它将打印出一些混合结果,其中一些将用于进程,而另一些将用于父进程,等等。我的问题是,我认为程序一旦看到进程类型就会被困在循环中,并进入该进程的循环,直到它打印出

所有内容才退出。

多线程/多进程程序本质上是不确定的。操作系统决定什么时候每个任务已经活动了太长时间,什么时候该调度一个新任务,正因为如此,特别是因为你的程序很短,很有可能子进程在父进程有机会再次被激活之前完成执行,或者反之亦然。

如果你希望程序交替运行这两个进程,你可以在循环中添加一个sleep语句来减慢它的速度,并迫使CPU更有规律地翻转。

如果你真的希望程序在这两者之间精确而均匀地交替,那么你要么需要使用互斥锁,要么需要删除多线程。

using fork()创建子进程和父进程,子进程应该打印no。从10到1,父进程应该打印一个数字的阶乘