- 论坛徽章:
- 0
|
由于代码比较多,没法帖上来,所以这里我贴一个示意代码逻辑。
#include <stdio.h>
#include <sys/types.h>
int g_runing;
pid_t g_pid;
void monitor()
{
// 这里是每隔300秒,监控一下工作进程,如果进程挂掉,则fork新的工作进程
// 间隔采用sleep(300)实现
}
int main(int argc, char* argv[])
{
// main process
printf("\n");
g_runing = 1;
pid_t pid = fork();
if (pid < 0)
{
printf("fork failed.err msg = [%s]\n", strerror(errno));
return -1;
}
else if (pid == 0)
{
// 分发进程
while (g_runing)
{
// 这里是不断扫描是否有相应的东西作分发
}
}
else
{
if ((pid = fork()) < 0)
{
printf("fork failed.err msg = [%s]", strerror(errno));
}
else if (pid == 0)
{
// 工作进程
while (g_runing)
{
// 不断扫描是否有分发进程分发过来的东西
// 有则处理
// 分发进程和工作进程之间的数据是通过共享内存来实现交互的
// 它们通过信号量来同步
}
exit(0);
}
else
{
g_pid = pid;
}
monitor();
}
return 0;
} |
|