问题标签 [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 投票
0 回答
134 浏览

signals - 向休眠进程发送信号

我想知道一个进程在休眠接收信号时会发生什么,以及如何强制它完成初始等待,尽管有信号。

我认为当一个进程正在睡眠时(例如使用 sleep() ),当它收到一个信号时,它会自动从睡眠中唤醒。为了迫使它完成等待,我不确定,我不知道这样的事情是否可行:

如果我错了,请纠正我,如果有人可以用它来启发我,我将不胜感激,我不需要太多代码,我主要想从理论上知道它。先感谢您。

0 投票
1 回答
25431 浏览

c - waitpid - 尽管子进程正常退出,WIFEXITED 返回 0

我一直在编写一个生成子进程的程序,并调用waitpid以等待子进程终止。代码如下:

waitpid状态的联机帮助页WIFEXITED

我的意思是它应该在成功时返回一个整数!= 0,这在我的程序执行中没有发生,因为我观察到WIFEXITED(status) == 0

但是,从命令行执行相同的程序会导致$? == 0,从 gdb 开始会导致:

该程序运行正常,除了触发的警告,这让我觉得这里发生了其他事情,我错过了。

编辑:
正如评论中建议的那样,我检查了孩子是否通过段错误终止,并且确实WIFSIGNALED(status)返回 1,并WTERMSIG(status)返回 11,即SIGSEGV.

但我不明白的是,为什么通过 execv 的调用会因段错误而失败,而通过 gdb 或 shell 的相同调用会成功?

EDIT2:
我的应用程序的行为很大程度上取决于子进程的行为,特别是子进程在声明的函数中写入的文件__attribute__ ((destructor))waitpid调用返回后,此文件存在并正确生成,这意味着段错误发生在另一个析构函数的某个地方,或者我无法控制的某个地方。

0 投票
1 回答
1441 浏览

c - 从c中的子进程获取退出状态

我无法弄清楚这段代码有什么问题。这是Linux机器上的C。

它应该做的是杀死我创建的所有子进程,等待所有子进程退出,然后为每个子进程打印一行,其中包含 pid、进程号(我创建)和信号号(应该是 9 表示已杀)。

那么我做错了什么?

0 投票
1 回答
1225 浏览

c++ - 子进程退出状态的含义

有一些这样的代码:

获取变量的调试打印,例如:

对于“mExitStatus = WEXITSTATUS(status)”,我得到以下说明

但问题是如何使用这 15 来判断子进程是否正确终止?

15 来自 3840。但是 3840 是由 linux 进程返回的?这有什么意义吗?

概括地说,我的 main 启动了 4 个 child_process 运行 4 个测试。我想主要判断这四个测试是否通过。所以我认为我需要判断我的子进程的退出状态。

谢谢

0 投票
1 回答
274 浏览

c - 管道和waitpid

我的管道有问题。我浏览了这些主题,但没有找到任何适合我的问题的东西。

我的管道运行良好,但我想知道我的孩子何时终止。所以我想用waitpid来检查我的孩子。但这不起作用。

我的管道:

我的等待

我可以把它放在我的管道下面,与管道的长度一样吗?

0 投票
0 回答
72 浏览

c++ - 我可以以编程方式获取退出(已失效)进程的 Pid 吗?

我遇到了一个问题,在调用之前知道哪些进程正在退出非常好waitpid()——因为我可能想从该/proc进程的目录中获取信息,具体取决于它是哪个。

我很好奇 C 或 C++ 中是否有一种编程方式来获取所有已失效进程的 PID。我知道可以grep从 中获取此信息ps,但我想知道是否有更好的方法以编程方式进行。

0 投票
1 回答
889 浏览

c - C - 在什么情况下调用 waitpid() 返回 -1,表示错误?

我正在编写一个 SIGCHLD 处理程序,我想知道在什么情况下调用 waitpid() 会返回 -1?

更具体地说,如果我创建一个循环,在其中调用 waitpid(...) 并希望它运行直到所有终止的子进程都被收割,我是否会迭代直到 waitpid(...) 返回 -1?否则,我怎么知道还有没有孩子需要收割呢?

0 投票
1 回答
321 浏览

linux - 如何确保我的孩子先执行,然后是父母?

下面我有一个简单的应用程序代码片段,它接受来自多个客户端的请求并通过 exec 调用数学运算并等待来自被调用进程的结果以通过管道将这些结果返回给相应的客户端

在这里我面临一个简单的问题,即父母首先快速执行,这使得waitpid()失败,通常waitpid()等待孩子退出但在我的情况下,当父母遇到waitpid()失败时甚至没有创建孩子

我的问题是而不是使用 a sleep()(它解决了我的问题但使程序运行缓慢!!)或任何IPC我如何确保叉子先执行我的孩子而不是我的父母

当我想到这一点时,我想到了一些方法,比如使用信号来阻止父级或信号量来实现原子性 有没有简单的方法可以确保我的孩子先执行,然后我的父母开始执行

0 投票
1 回答
634 浏览

perl - Perl 中的 waitpid 和 open3

如果 open3 调用的程序的输出太大(超过 65536),waitpid 将永远运行。

WNOHANG解决了这个问题:

但是现在返回码是 $? 是-1。这是waitpid的返回码。它可以通过肮脏的黑客来解决:

做这些事情的正确方法是什么?

UPD。似乎肮脏的黑客并不总是有效。

0 投票
2 回答
66 浏览

c - 等待返回过程

考虑:

(来自计算机系统,Bryant - O'Hallaron)。

我们被要求提供所有可能的输出序列。

我回答:acbc、abcc、bacc。但是,与解决方案 (bcac) 相比,我缺少一个输出。我认为这个输出是不可能的,因为父进程在打印 c (waitpid) 之前等待它的子进程返回。这不是真的吗?为什么?而且,在这种情况下,上面的代码和没有 waitpid 行的代码有什么区别?