无限循环等待 C 上的进程
Infinite Loop waiting a process on C
我试图让主进程等待 waitpid 指示的进程完成,但就在调用 waitpid 时,发生了无限循环。
看来waitpid引用的进程永远不会结束。
此进程始终是 unix 命令的 execlp,如 wc、rev、cat ...
如果我注释掉waitpid的代码,unix命令完美结束
调用任务和等待的代理代码:
int pid;
int estado_proceso;
for(pid=0;pid<numFiltros;pid++)
{
fprintf(stderr,"A esperar a %d\n", pids[pid]);
if (waitpid(pids[pid],&estado_proceso,0) >= 0)
imprimir_estado(filtros[pid], estado_proceso);
else
{
fprintf(stderr,"Error al esperar proceso %d\n",pid);
exit(1);
}
}
fprintf(stderr,"A ejecutar comando \n");
execlp(filtro,filtro, NULL);
fprintf(stderr,"Error al ejecutar el mandato '%s'\n",filtro);
exit(1);
编辑:
Fork和Pid获取码:
switch(pid = fork())
{
/* Error en el Fork */
case -1:
fprintf (stderr,"Error al crear proceso %d\n", pid);
exit(1);
/* Father Process*/
default:
pids[i-1] = pid;
在主线上:
pids = (pid_t*) malloc (sizeof(pid_t)*numFiltros);
其中 "numFiltros" 是 unix 命令的数量,如 wc、cat、rev...
有什么想法吗?
非常感谢!
尝试使用 wait
而不是显式 waitpid
,也就是说,尝试将等待代码替换为
int pid;
int estado_proceso;
while((pid = wait(&estado_proceso)) >= 0) {
if(pid > 0) {
fprintf(stderr, "Process with PID %d terminated.\n", pid);
imprimir_estado(pid, estado_proceso);
}
}
我试图让主进程等待 waitpid 指示的进程完成,但就在调用 waitpid 时,发生了无限循环。
看来waitpid引用的进程永远不会结束。
此进程始终是 unix 命令的 execlp,如 wc、rev、cat ...
如果我注释掉waitpid的代码,unix命令完美结束
调用任务和等待的代理代码:
int pid;
int estado_proceso;
for(pid=0;pid<numFiltros;pid++)
{
fprintf(stderr,"A esperar a %d\n", pids[pid]);
if (waitpid(pids[pid],&estado_proceso,0) >= 0)
imprimir_estado(filtros[pid], estado_proceso);
else
{
fprintf(stderr,"Error al esperar proceso %d\n",pid);
exit(1);
}
}
fprintf(stderr,"A ejecutar comando \n");
execlp(filtro,filtro, NULL);
fprintf(stderr,"Error al ejecutar el mandato '%s'\n",filtro);
exit(1);
编辑: Fork和Pid获取码:
switch(pid = fork())
{
/* Error en el Fork */
case -1:
fprintf (stderr,"Error al crear proceso %d\n", pid);
exit(1);
/* Father Process*/
default:
pids[i-1] = pid;
在主线上:
pids = (pid_t*) malloc (sizeof(pid_t)*numFiltros);
其中 "numFiltros" 是 unix 命令的数量,如 wc、cat、rev...
有什么想法吗? 非常感谢!
尝试使用 wait
而不是显式 waitpid
,也就是说,尝试将等待代码替换为
int pid;
int estado_proceso;
while((pid = wait(&estado_proceso)) >= 0) {
if(pid > 0) {
fprintf(stderr, "Process with PID %d terminated.\n", pid);
imprimir_estado(pid, estado_proceso);
}
}