FACT++
1.0
Main Page
Related Pages
Namespaces
Classes
Files
Examples
File List
File Members
dim_fork.cxx
Go to the documentation of this file.
1
#include <cerrno>
2
#include <cstdio>
3
#include <unistd.h>
4
#include <sys/wait.h>
5
extern
"C"
{
6
#include "
dis.hxx
"
7
}
8
9
static
int
id
,
id_cmd
,
run
= 0;
10
static
int
doForkNow
= 0;
11
12
void
handle_cmd
(
void
*tag,
void
*
data
,
int
*
size
)
13
{
14
doForkNow
= 1;
15
}
16
17
static
pid_t
fork_em
() {
18
// ::dis_remove_service(id);
19
::dis_stop_serving
();
20
::printf(
"Sleep a bit to see task disappear in did\n"
);
21
//::sleep(3);
22
pid_t pid = ::fork();
23
if
( pid == 0 ) {
24
::dim_init
();
25
::printf(
"PID:%d Register Child service Child/run to DNS....\n"
,::getpid());
26
id
=
::dis_add_service
((
char
*)
"Child/run"
,(
char
*)
"I"
,&
run
,
sizeof
(
run
),0,0);
27
::dis_start_serving
((
char
*)
"Child"
);
28
}
29
else
if
( pid > 0 ) {
30
::dim_init
();
31
//::sleep(3);
32
::printf(
"PID:%d RE-Register Parent to DNS....\n"
,::getpid());
33
id
=
::dis_add_service
((
char
*)
"Parent/run"
,(
char
*)
"I"
,&
run
,
sizeof
(
run
),0,0);
34
// id_cmd = :: dis_add_cmnd((char *)"Parent/cmd",(char*)"C",handle_cmd,0);
35
::dis_start_serving
((
char
*)
"Parent"
);
36
}
37
else
{
38
::printf(
"ERROR in fork!!!! %s\n"
,strerror(errno));
39
::exit(0);
40
}
41
return
pid;
42
}
43
44
int
main
(
int
/* argc */
,
char
**
/* argv */
) {
45
id
=
::dis_add_service
((
char
*)
"Parent/run"
,(
char
*)
"I"
,&
run
,
sizeof
(
run
),0,0);
46
// id_cmd = :: dis_add_cmnd((char *)"Parent/cmd",(char*)"C",handle_cmd,0);
47
::dis_start_serving
((
char
*)
"Parent"
);
48
::sleep(5);
49
pid_t child = 0;
50
51
Again:
52
child =
fork_em
();
53
if
( child > 0 ) {
54
int
status;
55
sleep(5);
56
kill(child,SIGTERM);
57
wait(&status);
58
sleep(1);
59
goto
Again;
60
}
61
62
while
(1)
63
{
64
/*
65
if(doForkNow)
66
{
67
int status;
68
doForkNow = 0;
69
if(child > 0)
70
{
71
kill(child,SIGTERM);
72
wait(&status);
73
sleep(1);
74
}
75
child = fork_em();
76
}
77
*/
78
::sleep(1);
79
}
80
return
1;
81
}
82
83
84
/*
85
86
g++ -o dim_fork -I../../DIM/dim -ldim -lrt -pthread ../test/dim_fork.cpp
87
88
[frankm@plus04 cmt]$ ./dim_fork
89
PID:20407 Register Child to DNS....
90
PID 20407 - Fri Dec 3 22:01:57 2010 - (FATAL) Child: Some Services already known to DNS
91
PID:20404 RE-Register Parent to DNS....
92
93
*/
fork_em
static pid_t fork_em()
Definition:
dim_fork.cxx:17
handle_cmd
void handle_cmd(void *tag, void *data, int *size)
Definition:
dim_fork.cxx:12
dis.hxx
main
int main(int, char **)
Definition:
dim_fork.cxx:44
id
static int id
Definition:
dim_fork.cxx:9
dim_init
void dim_init()
Definition:
dim_thr.c:111
dis_start_serving
#define dis_start_serving
Definition:
dis.h:8
dis_stop_serving
#define dis_stop_serving
Definition:
dis.h:9
run
static int run
Definition:
dim_fork.cxx:9
size
int size
Definition:
db_dim_server.c:17
data
float data[4 *1440]
Definition:
EventBuilderWrapper.h:95
doForkNow
static int doForkNow
Definition:
dim_fork.cxx:10
dis_add_service
#define dis_add_service
Definition:
dis.h:12
id_cmd
static int id_cmd
Definition:
dim_fork.cxx:9
dim
src
examples
dim_fork.cxx
Generated on Sun Sep 18 2016 20:50:18 for FACT++ by
1.8.11