【发布时间】:2011-05-06 06:21:35
【问题描述】:
在 Linux 上的 C 程序中,我 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);
}
}
【问题讨论】:
-
你真正想要达到什么目的?
-
让他们互相等待。
-
这两个进程共享文件,我正在编写自己的并发解析技术,类似于数据库中的事务,我需要测试我的程序。交错应该是随机的
-
高优先级线程的等待时间是一个困难的值,因为它必须非常非常小。