对于作业,我应该总共创建四个进程,并为每个进程打印一个多个字母。我应该两次拨打fork()
来完成此任务。
我已经能够为每个过程多次打印这些字母。问题的第二部分出现了问题。在我打印出来之前,我打算打印出每个进程的进程ID。输出应如下所示:
Process ID: 123
Process ID: 124
Process ID: 125
Process ID: 126
AAAAABBBBBCCCCCDDDDD
我认为这可以通过使用以下代码来实现:
pid_t child1, child2;
child1 = fork();
child2 = fork();
printf("Process created. ID: %d\n", getpid());
if(child1 == 0) { // print letters }
else if(child2 == 0) { //print letters }
else { // call waitpid and print more letters }
我认为自fork()
分割到child1 = fork()
行,然后再次在child2 = fork()
拆分,然后转到下一行,它会打印出所有内容然后点击if-else
声明。但是,这是我的输出:
Process created. ID: 20105
Process created. ID: 20107
AAProcess created. ID: 20106
AAABBBProcess created. ID: 20108
BBCCCCCDDDDD
如何确保首先执行我的Process Created打印语句?
答案 0 :(得分:0)
child1 = fork(); // Fork 1 here
child2 = fork(); // Fork 2 here after first fork .!!
上面的fork会生成四个进程。但是,您正在与原始父母以及您的第一个孩子进行第二次fork()
。我想这不是你真正需要做的。您只需要使用原始父级启动三个进程。
看一下给定的例子:这里我创建了2个子进程,所有进程数都是3 [使用main]。在这里,我试图提供一个具有所需输出的参考解决方案。
#include <unistd.h> /* Symbolic Constants */
#include <sys/types.h> /* Primitive System Data Types */
#include <stdio.h> /* Input/Output */
#include <sys/wait.h> /* Wait for Process Termination */
#include <stdlib.h> /* General Utilities */
int main()
{
pid_t childpid1,childpid2; /* variable to store the child's pid */
/* now create new process */
childpid1 = fork();
if (childpid1 >= 0) /* fork succeeded */
{
if (childpid1 == 0) /* fork() returns 0 to the child process */
{
printf("1 : %d \n",getpid());
printf("AA");
}
else /* fork() returns new pid to the parent process */
{
childpid2 = fork();
if (childpid2 >= 0) /* fork succeeded */
{
if (childpid2 == 0) /* fork() returns 0 to the child process */
{
printf("2 :%d \n",getpid());
int stat;
waitpid(childpid1, &stat, 0);
printf("BB");
}
else /* fork() returns new pid to the parent process */
{
printf("3 : %d \n",getpid()); // This is the Original parent of ALL
int stat2;
waitpid(childpid2, &stat2, 0);
printf("CC");
}
}
}
}
return 0;
}
答案 1 :(得分:-1)