问题标签 [waitpid]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
440 浏览

c - 如何检查任何线程当前正在工作

我知道有一个用于多进程

这是非阻塞函数调用,用于检查当前是否有任何子进程正在运行

但是有没有类似的 lib 函数来检查多线程?

我要做的就是检查当前是否有任何线程,如果没有重置一些全局值。

0 投票
5 回答
23641 浏览

c - 为什么 wait() 将状态设置为 255 而不是分叉进程的 -1 退出状态?

我正在尝试从子进程返回一个整数值。

但是,如果我使用exit(1)I get256作为wait(). 使用exit(-1)65280.

有没有办法获得从子进程发送的实际 int 值?

编辑:使用exit(-1)(这是我真正想要的)我得到 255 作为WEXITSTATUS(status). 它应该是未签名的吗?

0 投票
2 回答
3249 浏览

c - 从管道读取到我的子进程

希望是一个简单的问题。我正在尝试同时学习 fork()、pipe() 和 waitpid() 并遇到一些问题。

我越来越:

父母,监控有我的fds T

在程序退出之前——也就是说,循环只运行一次。我在下面有一个检查,它正在出现 WIFEXITED() 所以这个过程应该已经正常退出了。但令我困扰的是,在此之前有一个 sleep(10) ,并且这会立即发生 - 更不用说子进程在剩余的等待时间内保持运行。

显然,我从根本上误解了一些东西。我的期望是父循环会阻塞,直到它看到来自孩子的角色,阅读它,然后检查它是否还活着。当孩子还活着的时候,我当然没想到 waitpid() 会设置 WIFEXITED。

我哪里错了?

0 投票
2 回答
1122 浏览

c++ - 检查 POSIX 中退出的子进程?

我正在尝试编写一个程序来检查退出的子进程并在它们退出时重新启动它们。它需要在进程退出时重新启动它们,而无需等待任何其他进程退出。我有点失落。这是我到目前为止所做的代码。它没有完成或正确,真的。但也许有人可以指出我正确的方向?

0 投票
1 回答
3799 浏览

c - c中的分叉,waitpid问题

由于某种原因,这段代码立即执行了父母的命令,终止了我的信号量并搞砸了我对其他程序的流量控制。谁能告诉我为什么 waitpid() 不起作用?

}

谢谢!

编辑:好的,我将waitpid替换为:

这让我成功了。它没有立即执行家长控制,但现在似乎永远不会执行。至于你谈到的管道问题,程序1(这个)应该终止所有IPC元素,包括管道。如果有更好的方法,我很想听听。

谢谢@乔纳森

0 投票
1 回答
680 浏览

c - 我的 POSIX 信号处理程序中的竞争条件

下面的程序派生出一个孩子,它重复运行“/bin/sleep 10”。父级为 SIGINT 安装一个信号处理程序,将 SIGINT 传递给子级。但是,有时向孩子发送 SIGINT 会失败。为什么会这样,我想念什么?

0 投票
1 回答
230 浏览

fork - 在哪里放置 wait_pid 函数以防止 Linux 中的 zoombie 进程?

我正在关注 OpenSSL多线程服务器示例,但此示例创建了 zoombie 进程。我研究并发现我应该为每个分叉进程执行一个 waitpid() 。但是我无法弄清楚在 waitpid(pid, NULL, 0);while循环结束之前放置它的位置,但它只是等待分叉的即时进程,而不是等待所有进程。有人可以指导在哪里以及如何执行 waitpid() 调用。谢谢!

0 投票
1 回答
12353 浏览

linux - OOM 杀手杀死进程时返回代码

我正在使用 SUSE SLES 11 在 POWER7 系统上运行多程序工作负载(基于 SPEC CPU2006 基准测试)。

有时,工作负载中的每个应用程序都会消耗大量内存,并且总内存占用量超过了系统中安装的可用内存 (32 GB)。

我禁用了交换,否则使用交换的进程可能会严重影响测量。我知道通过这样做,内核可能会通过 OOM 杀手杀死一些进程。那完全没问题。问题是我希望被内核杀死的线程以错误条件退出(例如,进程被信号终止)。

我有一个框架可以启动所有进程,然后等待它们使用

即使线程被 OOM 杀手杀死(我知道,因为我在屏幕和 /var/log/messages 中收到一条消息),调用

返回一个,然后调用

返回零。因此,我无法区分进程何时正确完成以及何时被 OOM 杀手杀死。

我做错什么了吗?您是否知道任何方法来检测进程何时被 OOM 杀手杀死。

我发现这篇文章问了几乎相同的问题。但是,由于这是一个旧帖子并且答案并不令人满意,我决定发布一个新问题。

0 投票
1 回答
305 浏览

c - Oracle beq 和 popen()

我有一个这样的程序(用于 Pro*C 预编译器):

当我使用 tcp/ip 连接到 oracle 时,它​​工作正常。但是当我使用 BEQ 时,pclose() 返回 -1 和 errno 10。有人可以指导我查看描述 BEQ 连接可能问题的文档吗?似乎在 oracle 的内部某处已经有 wait() 调用了……</p>

0 投票
3 回答
9585 浏览

perl - 如何在不杀死孩子的情况下使waitpid超时?

我知道有关 waitpid 和超时的许多问题,但它们都通过从警报处理程序中杀死孩子来解决这个问题。

这不是我想要的,我想保持进程运行,但从 waitpid 分派它。

我试图解决的底层问题是一个守护进程,它有一个处理队列的主循环。一次处理一个任务。

如果一个任务挂起,整个主循环就会挂起。要解决这个问题fork()waitpid似乎是一个明显的选择。如果任务挂起,循环仍然挂起。

我可以想到一些解决方法,我根本不使用 waitpid,但我必须以另一种方式跟踪正在运行的进程,因为我仍然希望一次处理一个任务与可能挂起的任务并行。

我什至可以终止任务,但我想让它运行以检查到底出了什么问题。转储一些调试信息的终止处理程序也是可能的。

无论如何,解决该问题的最方便的方法是在可能的情况下使 waitpid 超时。

编辑:

这就是我使用 fork() 和 waitpid 的方式,它可能更清楚孩子的含义。

编辑:

使用 waitpid WNOHANG 可以满足我的要求。这种用法是好的做法还是你会做不同的事情?