关于子linux进程调度的问题
我 有一个 程序,是想让五个子进程一个一个地打印出信息,但是程序实现的是五个进程一起打印出来了,怎么改才能实现呢? 麻烦给看看
#include "stdio.h "
#include <sys/types.h>
#include <unistd.h>
#include <sched.h>
#include <signal.h>
#include <sys/wait.h>
#include <string.h>
#include <errno.h>
#include <stdlib.h>
#include <sys/time.h>
#include <sys/resource.h>
pid_t pid[5];
void kill_process()
{
exit(0);
}
/*显示进程调度策略和优先级的信息*/
void show_info(pid_t pid)
{
struct sched_param sp;
int policy;
policy = sched_getscheduler(pid);
if (policy == -1) {
perror( "sched_getscheduler ");
fprintf(stderr, "failed to get pid %d 's policy\n ", pid);
exit(1);
}
printf( "scheduling policy: ");/*打印进程的调度策略*/
switch (policy) {
case SCHED_OTHER:
printf( "SCHED_OTHER\n ");
break;
case SCHED_FIFO:
printf( "SCHED_FIFO\n ");
break;
case SCHED_RR:
printf( "SCHED_RR\n ");
break;
default:
printf( "unknown\n ");
}
if (sched_getparam(pid, &sp)) {
perror( "sched_getparam ");
fprintf(stderr, "failed to get pid %d 's attributes\n ", pid);
exit(1);
}
printf( "scheduling priority: %d\n ", sp.sched_priority);/*打印进程的优先级*/
}
void user_fork(int i)
{
char outstr[20];
if ((pid[i] = fork()) < 0) { /*创建进程*/
printf( "fork error ");
}
else if (pid[i] == 0) {
signal(SIGUSR1,kill_process);
while(1)
{
sleep(10);
sprintf(outstr, "I am P%d---pid=%d\n ",i+1,getpid());
write(1,outstr,sizeof(outstr));
strcpy(outstr, " ");
pid[i]=getpid();
show_info(pid[i]);
}
}
}
int
main(void)
{
pid_t pid[5];
user_fork(0);
sleep(10);
user_fork(1);
sleep(10);
user_fork(2);
sleep(10);
user_fork(3);
sleep(10);
kill(pid[3],SIGUSR1);
kill(pid[2],SIGUSR1);
user_fork(4);
sleep(10);
if(waitpid(pid[3],NULL,0)!=pid[3])
write(2, "wait 3 error ",20);
if(waitpid(pid[2],NULL,0)!=pid[2])
write(2, "wait 2 error ",20);
getchar();
exit(0); <