- 論壇徽章:
- 0
|
首先父進(jìn)程創(chuàng)建子進(jìn)程,兩個(gè)進(jìn)程各自輸出自己的優(yōu)先級以及調(diào)度策略,當(dāng)子進(jìn)程給父進(jìn)程發(fā)送SIGINT信號后,父進(jìn)程優(yōu)先級-1,當(dāng)父進(jìn)程給子進(jìn)程發(fā)送SIGTSTP信號后,子進(jìn)程優(yōu)先級+1,但運(yùn)行時(shí)為何父子進(jìn)程優(yōu)先級都沒有變?謝謝- #include "exercise3.h"
- int main(int argc, char *argv[])
- {
- int pid;
- int psched, csched;
- int pprio, cprio;
- int i, j;
- if((pid = fork()) > 0) //父進(jìn)程
- {
- signal(SIGTSTP, psigcat); //聲明信號處理函數(shù)
- for(i = 0; i < 10; i++)
- {
- psched = sched_getscheduler(getpid()); //獲取調(diào)度策略
- pprio = getpriority(PRIO_PROCESS, getpid()); //獲取優(yōu)先級
- printf("Parent process %d schedule policy is %d priority is %d\n", getpid(), psched, pprio);
- kill(SIGINT, pid); //向子進(jìn)程發(fā)送消息
- sleep(1);
- }
- }
- else //子進(jìn)程
- {
- signal(SIGINT, csigcat); //聲明信號處理函數(shù)
- for(j = 0; j < 10; j++)
- {
- csched = sched_getscheduler(getpid()); //獲取調(diào)度策略
- cprio = getpriority(PRIO_PROCESS, getpid()); //獲取優(yōu)先級
- printf("Child process %d schedule policy is %d priority is %d\n", getpid(), csched, cprio);
- kill(SIGTSTP, getppid()); //向子進(jìn)程發(fā)送消息
- sleep(1);
- }
- exit(EXIT_SUCCESS);
- }
- exit(EXIT_SUCCESS);
- }
復(fù)制代碼- #include <sched.h>
- #include <sys/time.h>
- #include <sys/resource.h>
- #include <unistd.h> //sleep
- #include <signal.h> //signal
- #include <stdlib.h>
- #include <stdio.h>
- #include <sys/types.h>
- void psigcat() //父進(jìn)程信號處理函數(shù)
- {
- int prio;
- prio = getpriority(PRIO_PROCESS, getpid());
- setpriority(PRIO_PROCESS, getpid(), prio-1);
- return ;
- }
- void csigcat()
- {
- int prio;
- prio = getpriority(PRIO_PROCESS, getpid());
- setpriority(PRIO_PROCESS, getpid(), prio+1);
- return ;
- }
復(fù)制代碼 |
|