|
Posted on 2007-02-12 16:30 东舟 阅读(1318) 评论(4) 编辑 收藏 所属分类: Linux
#include
<
sys
/
wait.h
>
#include
<
sys
/
types.h
>
#include
<
unistd.h
>
#include
<
errno.h
>
#include
<
stdarg.h
>
#include
<
stdio.h
>
#include
<
string.h
>
int
startprocess(
char
*
path[],
char
*
name[],
int
pid[
3
]);
int
watchprocess(
int
ppid);
int
rebootpocess(
char
*
path[],
char
*
name[],
int
ppid,
int
num);
int
main(
int
argc,
char
*
argv[],
char
*
envp[])
{
char
*
path[
3
]; path[
0
]
=
"
/home/tony/testmysql/source/mysqlDB/test
"
; path[
1
]
=
"
/home/tony/testmysql/source/mysqlDB/test1
"
; path[
2
]
=
"
/home/tony/testmysql/source/mysqlDB/test2
"
;
char
*
name[
3
]; name[
0
]
=
"
test
"
; name[
1
]
=
"
test1
"
; name[
2
]
=
"
test2
"
;
int
pid[
3
];
int
ppid; startprocess(path,name,pid);
//
printf("%d\n",pid[0]);
for
(;;)
{
int
j;
for
(j
=
0
;j
<
3
;j
++
)
{
if
(watchprocess(pid[j])
<
0
) rebootpocess(path,name,pid[j],j); }
sleep(
30
); }
//
if(watchprocess(3025)<0)
//
rebootpocess(path,name,5317,2);
return
0
; }
int
startprocess(
char
*
path[],
char
*
name[],
int
pid[
3
])
{
int
i
=
0
;
for
(i
=
0
;i
<
3
;i
++
)
{
int
fd; fd
=
fork();
if
(fd
<
0
)
{
return
-
1
; }
if
(fd
==
0
)
{ execl(path[i],name[i],(
char
*
)
0
); exit(
0
); }
else
{ pid[i]
=
fd;
continue
; }
}
return
0
; }
int
watchprocess(
int
ppid)
{ printf(
"
======watchprocess========\n
"
); printf(
"
%d\n
"
,ppid);
char
*
filename
=
(
char
*
)malloc(
100
); sprintf(filename,
"
/proc/%d/status
"
,ppid); FILE
*
pFile;
char
*
line
=
NULL; size_t len
=
0
; ssize_t read; pFile
=
fopen (filename,
"
r
"
);
if
(pFile
==
NULL)
{ printf(
"
%s\n
"
,
"
Config file is not exist!\n
"
);
return
-
1
; }
int
linenum
=
0
;
char
*
tmp;
//
char* tmp1 = (char*)malloc(20);
while
((read
=
getline(
&
line,
&
len, pFile))
!=
-
1
&&
linenum
<
3
)
{ linenum
++
; strtok(line,
"
\t
"
); tmp
=
strtok(NULL,
"
"
);
if
( linenum
==
2
&&
((strcmp(tmp,
"
S
"
)
==
0
)
||
(strcmp(tmp,
"
R
"
)
==
0
)) )
{
//
printf("sdfsdlfw2rwW$#@^$%&YERGHFDGDFGERYG\n");
fclose(pFile); pFile
=
NULL;
return
0
; }
}
free(filename); fclose(pFile); pFile
=
NULL;
return
-
1
; }
int
rebootpocess(
char
*
path[],
char
*
name[],
int
ppid,
int
num)
{ printf(
"
======rebootpocess========\n
"
); printf(
"
%d\n
"
,num);
if
(kill(ppid,SIGKILL)
==
0
)
{
int
fd; fd
=
fork();
if
(fd
==
0
)
{ execl(path[num],name[num],NULL); exit(
0
); }
else
{
return
0
; }
}
else
{ printf(
"
Kill the process failed!
"
);
return
-
1
; }
return
0
; }
Feedback
# re: linux进程监控[未登录] 回复 更多评论
2007-12-09 15:15 by
我很想知道你这个进程监控程序大概的思路,尤其是他是怎么样对我想监控的进程进行监控的,是怎样判断的是不是那个进程。谢谢!! 我的邮箱:zhanshicai8139@163.com
我的邮箱是:jiangminjie2008@hotmail.com
# re: linux进程监控[未登录] 回复 更多评论
2012-08-07 21:05 by
我的邮箱:jlyh225@163.com
我也想知道你的思路
# re: linux进程监控 回复 更多评论
2012-10-12 17:24 by
你好,最近在学习进程监控这一块,想请教博主的这段程序的进程监控的原理,我的邮箱avrtercel@163.com,辛苦了!谢谢!
|