资源简介
3.4 独立实验
设有两个并发执行的父子进程,不断循环输出各自号、优先数和调度策略。 设有两个并发执行的父子进程,不断循环输出各自号、优先数和调度策略。 设有两个并发执行的父子进程,不断循环输出各自号、优先数和调度策略。 设有两个并发执行的父子进程,不断循环输出各自号、优先数和调度策略。 设有两个并发执行的父子进程,不断循环输出各自号、优先数和调度策略。 设有两个并发执行的父子进程,不断循环输出各自号、优先数和调度策略。 设有两个并发执行的父子进程,不断循环输出各自号、优先数和调度策略。 设有两个并发执行的父子进程,不断循环输出各自号、优先数和调度策略。 设有两个并发执行的父子进程,不断循环输出各自号、优先数和调度策略。 设有两个并发执行的父子进程,不断循环输出各自号、优先数和调度策略。 设有两个并发执行的父子进程,不断循环输出各自号、优先数和调度策略。 设有两个并发执行的父子进程,不断循环输出各自号、优先数和调度策略。 设有两个并发执行的父子进程,不断循环输出各自号、优先数和调度策略。 设有两个并发执行的父子进程,不断循环输出各自号、优先数和调度策略。 设有两个并发执行的父子进程,不断循环输出各自号、优先数和调度策略。 设有两个并发执行的父子进程,不断循环输出各自号、优先数和调度策略。 设有两个并发执行的父子进程,不断循环输出各自号、优先数和调度策略。 进程初始调度策略均为系统默认和优先级。当 进程初始调度策略均为系统默认和优先级。当 进程初始调度策略均为系统默认和优先级。当 进程初始调度策略均为系统默认和优先级。当 进程初始调度策略均为系统默认和优先级。当 进程初始调度策略均为系统默认和优先级。当 进程初始调度策略均为系统默认和优先级。当 进程初始调度策略均为系统默认和优先级。当 进程初始调度策略均为系统默认和优先级。当 进程初始调度策略均为系统默认和优先级。当 进程初始调度策略均为系统默认和优先级。当 进程初始调度策略均为系统默认和优先级。当 父进程收到 进程收到 由键盘 由键盘 Ctrl+CCtrl+C Ctrl+C 发 出的 SIGINT SIGINTSIGINTSIGINTSIGINT信号时会自动将其优先数加 信号时会自动将其优先数加 信号时会自动将其优先数加 信号时会自动将其优先数加 信号时会自动将其优先数加 信号时会自动将其优先数加 信号时会自动将其优先数加 1,子进程 子进程 收到 由键盘 由键盘 Ctrl+ZCtrl+Z Ctrl+Z发出的 SIG SIGTSTP STP信号时会自动将其优先数减 信号时会自动将其优先数减 信号时会自动将其优先数减 信号时会自动将其优先数减 信号时会自动将其优先数减 信号时会自动将其优先数减 信号时会自动将其优先数减 1。 请编程实现以上功能。 请编程实现以上功能。 请编程实现以上功能。 请编程实现以上功能。 请编程实现以上功能。
代码片段和文件信息
#include
#include
#include
#include
#include
#include
#include
#include
#include
typedef void (*sighandler_t)(int);
void sigcat(){
//+1
setpriority(PRIO_PROCESS getpid() getpriority(PRIO_PROCESS 0) + 1);
}
void sigzat(){
//-1
setpriority(PRIO_PROCESS getpid() getpriority(PRIO_PROCESS 0) - 1);
}
void nothing() {}
int main(int argc char *argv[])
{
int pid; //存放进程号
struct sched_param p[2]; //设置调度策略时使用的数据结构
int i;
for( i=0; i<2;i++){
//取进程优先数放在调度策略数据结构中
p[i].sched_priority = 10;
}
pid = fork();
if(pid < 0){
printf(“failed!“);
}
else if(pid > 0){
signal(SIGINT (sighandler_t)sigcat); //-1
signal(SIGTSTP (sighandler_t)nothing);
sched_setscheduler(getpid() SCHED_OTHER &p[0]);
setpriority(PRIO_PROCESS getpid() 10);
sleep(2);
//循环报告其优先数和调度策略
while(1){
printf(“parent PID = %d priority = %d scheduler = %d\n“ getpid()getpriority(PRIO_PROCESS 0) sched_getscheduler(getpid()));
sleep(4);
}
}
else{
signal(SIGTSTP (sighandler_t)sigzat);
signal(SIGINT (sighandler_t)nothing);
sched_setscheduler(getpid() SCHED_OTHER &p[1]);
setpriority(PRIO_PROCESS getpid() 10);
sleep(2);
///循环报告其优先数和调度策略
while(1){
printf(“Child PID = %d priority= %d scheduler = %d\n“getpid()getpriority(PRIO_PROCESS0) sched_getscheduler(getpid()));
sleep(4);
}
exit( EXIT_SUCCESS);
}
return EXIT_SUCCESS;
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2013-05-03 19:43 test3\
文件 189 2013-04-26 14:43 test3\#Makefile#~
文件 7586 2013-04-26 17:14 test3\.goutputstream-CBM1VW
文件 7773 2013-05-03 19:42 test3\a.out
文件 154 2013-04-26 15:08 test3\Makefile
文件 189 2013-04-26 14:47 test3\Makefile~
文件 1637 2013-05-03 19:43 test3\psched.c
文件 1705 2013-04-26 14:57 test3\psched.c ~
文件 1637 2013-05-03 19:43 test3\psched.c~
文件 0 2013-04-26 15:08 test3\无标题文档~
评论
共有 条评论