首页 > 解决方案 > 检查进程是否正在运行的问题

问题描述

我需要创建派生为子进程的进程,这些子进程将使用 execv() 执行命令。父进程将立即结束,让子进程运行新图像。我已经存储了子进程 ID,当调用命令时,我将检查该进程是否正在运行。这是代码。

for(size_t i = 0; i < currProcess; i++) {
        if (kill(processArr.pid, 0) != 0 && errno == ESRCH) {
            processArr[i].run = false;
        } else {
            processArr[i].run = true;
        }
    }

但是,这些进程似乎并没有结束并且永远在运行。execv() 图像在完成后不会结束进程吗?代码有问题吗?

标签: c

解决方案


您已经说过您正在检查子进程是否正在运行,但您没有详细说明它是否应该结束以及何时结束。

获得更多信息或查看已执行进程正在运行的代码以及 processArr 结构会很好。

如果您确信该过程应该结束,您可以做的几件事是尝试删除 if 语句中的和 errno 检查,看看它是否会改变结果。

这可能是由于您尝试检查 errno 的方式,以下是 errno 手册页的解释:

   A common mistake is to do

       if (somecall() == -1) {
           printf("somecall() failed\n");
           if (errno == ...) { ... }
       }

   where errno no longer needs to have the value it had upon return from
   somecall() (i.e., it may have been changed by the printf(3)).  If the
   value of errno should be preserved across a library call, it must be
   saved:

       if (somecall() == -1) {
           int errsv = errno;
           printf("somecall() failed\n");
           if (errsv == ...) { ... }
       }

希望它会有所帮助,如果没有,我将不胜感激更多信息。


推荐阅读