使用vim编制一段程序,使用系统调用fork()创建两个子进程,在此程序运行时,系统中就有一个父进程和两个子进程在活动。让每一个进程在屏幕上显示一个字符:父进程显示字符a,两个子进程分别显示字符b和子符c。试观察、记录并分析屏幕上进程调度和并发执行的情况。若在程序中使用系统调用nice()来改变各进程的优先级,会出现什么现象?
时间: 2024-03-25 13:42:08 浏览: 43
好的,我明白了你的问题。以下是使用vim编写的此程序的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main()
{
pid_t pid1, pid2;
pid1 = fork(); // 创建第一个子进程
if (pid1 < 0)
{
perror("fork error");
exit(EXIT_FAILURE);
}
else if (pid1 == 0) // 子进程1
{
printf("b\n");
exit(EXIT_SUCCESS);
}
else // 父进程
{
pid2 = fork(); // 创建第二个子进程
if (pid2 < 0)
{
perror("fork error");
exit(EXIT_FAILURE);
}
else if (pid2 == 0) // 子进程2
{
printf("c\n");
exit(EXIT_SUCCESS);
}
else // 父进程
{
printf("a\n");
wait(NULL);
wait(NULL);
exit(EXIT_SUCCESS);
}
}
return 0;
}
```
运行上述程序后,屏幕上会依次出现字符a、b和c,因为父进程先运行,然后创建了两个子进程,子进程1先运行,输出字符b,然后子进程2运行,输出字符c。由于父进程在等待两个子进程结束后才会退出,所以字符a最后输出。
如果在程序中使用nice()来改变各进程的优先级,将会出现优先级高的进程先运行的情况。比如,将父进程的优先级设置为0,将子进程1的优先级设置为5,将子进程2的优先级设置为10,那么程序运行时,屏幕上最先出现的字符将是字符c,因为子进程2的优先级最高,其次是字符b,因为子进程1的优先级次之,最后是字符a。