c - 检查进程是否正在运行的问题
问题描述
我需要创建派生为子进程的进程,这些子进程将使用 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() 图像在完成后不会结束进程吗?代码有问题吗?
解决方案
您已经说过您正在检查子进程是否正在运行,但您没有详细说明它是否应该结束以及何时结束。
获得更多信息或查看已执行进程正在运行的代码以及 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 == ...) { ... }
}
希望它会有所帮助,如果没有,我将不胜感激更多信息。
推荐阅读
- c# - 从资源管理器拖放到 wpf 元素
- docker - 使用 Fluentd 进行 Docker 日志记录,我无法解析我想要的内容
- javascript - 如何在pdf中使用html css生成同一张表
- c++ - 从用户那里获取未知数量的数字,并通过使用动态分配的内存来存储这些值来获取这些数字的平均值
- google-apps-script - 如果我使用的是 Google Oauth,是否有一种简单的方法可以查看已通过身份验证的用户列表?
- css - 如何解决 CSS 过渡语法错误?
- r - R根据同一列中的前一个单元格值生成一个单元格值
- javascript - 如何打开 768px 的 A TAB?
- javascript - 我怎样才能无限点击我的按钮,因为在我点击按钮后它不再起作用
- python - 在 scipy.minimize 中具有多个返回值作为输入的函数