Chinaunix
标题:
kill -0 为何不能真确检测到进程
[打印本页]
作者:
wujiajia
时间:
2011-07-18 11:57
标题:
kill -0 为何不能真确检测到进程
28 int exec() {
29 const char *pname=m_procname.c_str();
30 const char *pparam=m_param.c_str();
31 if (m_num==0) {
32 printf("restart filed num lager restart tiems \n");
33 return 0;
34 }
35 m_pid=fork();
36 if (m_pid < 0) {
37 return -1;
38 } else if(m_pid == 0) {
39 if (execlp(pname,pname,pparam,0) < 0) {
40 exit(1);
41 }
42 } else {
43 printf("Begin Start [%s][%s][%d]\n",m_procname.c_str(),m_param.c_str(),m_pid);
44 if ( kill(m_pid,0)<0 && errno == ESRCH) {
45 printf("Process[%s][%s][%s] Start Error\n",pname,pparam,strerror(errno));
46 printf ("Process [%d] not exist\n",m_pid);
47 m_pid=0;
48 }
49 }
50 return 0;
51 }
复制代码
进程已经退出可,为何在44行没有进入执行呢?
作者:
flw
时间:
2011-07-18 12:18
44 行是一个糟糕的编程风格。
好的风格应该是
ret = kill();
if ( ret == -1 ){
if ( errno == ESRCH ){
.......
}
else if ( ...... ){
........
}
else{
......
}
........
}
复制代码
作者:
wujiajia
时间:
2011-07-18 12:38
execlp 函数执行了一个不存在的程序,子进程退出,为何kill还能检测到该进程呢?help
作者:
drangon
时间:
2011-07-18 12:50
程序里面sleep一下,程序外面ps一下,看看进程是否还在,说不定状态是Z
作者:
wujiajia
时间:
2011-07-18 12:55
不是僵死啊
作者:
koolcoy
时间:
2011-07-18 19:54
原因是你kill的时候子进程还没退出,典型的多进程/线程同步问题
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2