无限循环等待C上的进程

时间:2016-04-02 12:21:26

标签: c unix posix

我试图让主进程等待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;

On Main:

pids =(pid_t *)malloc(sizeof(pid_t)* numFiltros);

其中&#34; numFiltros&#34;是wc,cat,rev ...等unix命令的数量。

有什么想法吗? 非常感谢!

1 个答案:

答案 0 :(得分:0)

尝试使用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);
    }
}