我正在编写一个程序,该程序将从1打印到10,但我希望前五个数字由子进程打印,最后5个应该由父进程打印:
#include <unistd.h>
#include <stdio.h>
#include "process.h"
/**
* main - Entry point for my program
*
* Return: On success, it returns 0.
* On error, it returns 1
*/
int main(void)
{
int id = fork();
int n, i;
if (id == 0)
n = 1;
else
n = 6;
for (i = n; i < n + 5; i++)
printf("%d\n", i);
return (0);
}
产出如下:
6
7
8
9
10
1
2
3
4
5
我是UNIX进程的新手,所以我不明白为什么要首先打印父进程输出(从6-10)。父进程的执行是否优先于子进程?如果我想让子进程先运行(即先打印1-5),我怎么做呢?
发布于 2022-09-11 15:54:30
这做你想做的事:
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/wait.h>
/**
* main - Entry point for my program
*
* Return: On success, it returns 0.
* On error, it returns 1
*/
int main(void)
{
int id = fork();
int n, i;
if (id < 0) {
perror("fork failed: ");
exit(1);
} else if (id == 0) {
n = 1;
} else {
int status, cid;
n = 6;
cid = wait(&status);
if (cid != id) {
perror("fork failed: ");
exit(1);
}
}
for (i = n; i < n + 5; i++) {
printf("%d\n", i);
}
return (0);
}
为了让孩子们走第一步,我们做了几项改变。
succeeded.
id < 0
检查,以打印错误。id < 0
()的调用,以允许子节点在父循环之前退出。id < 0
返回的消息,以确保为used.id < 0
头。在测试中,这是输出:
1
2
3
4
5
6
7
8
9
10
https://stackoverflow.com/questions/73632840
复制相似问题