使用 fork 在 c++ 中创建子打印 a-z 和父进程 A-Z
Using fork to create a child print a-z & parent process A-Z in c++
我试图使用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,父进程应该打印一个数字的阶乘
相关文章:
- boost::进程间消息队列引发错误
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 是否可以通过C++扩展强制多个python进程共享同一内存
- IPC使用多个管道和分支进程来运行Python程序
- 异常属于C++中的线程还是进程
- WMI检测进程创建事件-c++
- c++多进程编写一个唯一的文件
- 如何在C++中将函数发送到另一个进程
- 在Qt Creator中,如何在连接到正在运行的进程后查看控制台输出
- 终止 QProcess 不会终止子进程
- 将返回值从 exe 传递到 bat,并将其传递给 C# 中的进程
- COM :是否可以查看是否存在对我的某个 COM 对象的进程外引用?我可以释放它吗?
- Windows 进程间同步类似事件?
- 在挂钩启动新线程时解除挂钩进程
- pclose() 不会给我进程退出代码
- 运行代码时,c++ 会终止进程
- 可以读入进程内存的最大块大小是多少?
- 枚举进程模块在有效句柄上返回无效句柄
- 如何读取特定地址的进程内存?
- 如何从另一个进程解开全局钩子?