- 论坛徽章:
- 0
|
请教大家一个问题,看看大家有没有遇到过
就是HP UNIX上popen的时候,报了错,打印出errno是 error: 11,Resource temporarily unavailable
然后安装使用命令tusc去跟踪查看系统调用的情况,实在popen内部调用fork时报了ERR#11 EAGAIN的错误,
上网查了以后,说是系统进程最大个数和用户进程最大个数超出,会报这个错误,但是使用命令去查了以后:
crmdb2#[/home] ps -ef | wc -l
564
crmdb2#[/home] sysdef|grep nproc
nproc 30000 - 10- -
crmdb2#[/home]
crmdb2#[/home]
crmdb2#[/home] sysdef |grep maxuprc
maxuprc 27001 - 3- -
都没有超出,所以实在找不出是怎么回事了
源码如下:
char * pUserName = getenv("LOGNAME");
char sCheckShell[256]={0};
sprintf(sCheckShell," ps -fu %s|grep %s |grep -iv 'grep'| "
" awk '{print $1,$2}' |grep `whoami` |awk '{print $2}' ",pUserName,cstrAppName);
FILE* fd = popen(sCheckShell,"r");
if(fd==0)
return true;
if(feof(fd)==EOF)
return true;
char sPid[LINEMAXCHARS]={0};
while ( fgets( sPid, LINEMAXCHARS, fd ) )
{
if(!CheckProcessIsStop(atoi(sPid)))
{
pclose(fd);
return false;
}
memset(sPid,0,sizeof(sPid));
}
pclose(fd);
PS:进程刚启动的时候不会,只有运行了一段时间才会 |
|