В программе на C на Linux я выполняю fork (), а затем дважды выполняю execve (), чтобы создать два процесса, выполняющих две отдельные программы. Как мне убедиться, что выполнение двух дочерних процессов чередуется?
Спасибо
Попытка выполнить вышеупомянутую задачу, как предложил ответ, приведенный ниже, но, кажется, встречается с зависанием процесса sched_scheduler (). Включая код ниже ... replay1 и replay2 - это два програна, которые просто выводят «Replay1» и «Replay2» соответственно.
# include<stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <signal.h>
#include <sched.h>
void main()
{
int i,pid[5],pidparent,new=0;
char *newargv1[] = {"./replay1",NULL};
char *newargv2[] = {"./replay2",NULL};
char *newenviron[] = {NULL};
struct sched_param mysched;
mysched.sched_priority = 1;
sched_setscheduler(0,SCHED_FIFO, &mysched);
pidparent =getpid();
for(i=0;i<2;i++)
{
if(getpid()==pidparent)
{
pid[i] = fork();
if(pid[i] != 0)
kill(pid[i],SIGSTOP);
if(i==0 && pid[i]==0)
execve(newargv1[0], newargv1, newenviron);
if (i==1 && pid[i]==0)
execve(newargv2[0], newargv2, newenviron);
}
}
for(i=0;i<10;i++)
{
if(new==0)
new=1;
else
new=0;
kill(pid[new],SIGCONT);
sleep(100);
kill(pid[new], SIGSTOP);
}
}