c - 无限循环等待 C 上的进程

标签 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;
<小时/>

在主要部分:

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);
    }
}

关于c - 无限循环等待 C 上的进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36373172/

相关文章:

c - 检测日志文件已在 POSIX 系统上被删除或截断?

php - 什么是SIGBABY?

c - 如何在C中扫描argv?

c - 警告 : passing argument 2 of ‘getsockname’ from incompatible pointer type

linux - 无法使用外部表读取文件或使用 PL/SQL 使用 UTL_FILE 写入文件

python - 是否有一种标准的 UNIX 方式可以明确地将 <filename> 和 <lineno> 写入 stderr?

c - 为什么我不能编辑 char* 中的 char?

c - 如何在 Linux 中编写文本模式的图形用户界面?

linux - shell中for循环控制变量的范围?

c - 父进程根据退出状态监视和派生新的子进程