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

c - waitpid 与 execl 用于子级返回 -1 与 ECHILD?

waitpid如果我execl在可能需要时间完成的子进程中使用,我什么时候需要使用?

当我waitpid在父级中使用时,它告诉我子级正在运行,因为 from 的返回值为waitpid0。但是,如果我waitpid在一段时间后在另一个函数中调用,它会返回 -1 并errno设置为ECHILDwaitpid如果我不确定孩子是否完成了,我应该什么时候使用?

0 投票
3 回答
5806 浏览

linux - Linux、waitpid、WNOHANG、子进程、僵尸

我将我的程序作为守护进程运行。

父进程只等待子进程,当它意外死亡时,fork 并再次等待。

但是当子进程被 -9 信号杀死时,子进程进入僵尸进程。

waitpid应该立即返回子进程的pid!
但是waitpid大约90秒后得到了pid号,

这是父亲的踪迹

父亲没有卡住,总是调用wait4。

大约 90 秒后,父亲得到了 SIGCHILD,wait4 返回了死去孩子的 pid。

为什么子进程没有立即退出?反而意外地变成了丧尸。

0 投票
1 回答
1957 浏览

c - execl 之前的打印在输出中不可见

输出:

现在,如果我将在父级中删除 sleep(5) 则输出:

最后,我尝试使用 0 作为 waitpid 而不是 WNOHANG 的第三个参数,然后它给了我下面的输出以及任何孩子的打印:

有人可以帮助我了解执行 execl 之后和执行之前进程的行为吗?

0 投票
2 回答
4340 浏览

c - WEXITSTATUS(childStatus) 返回 0 但 waitpid 返回 -1

据我所知,如果 waitpid 返回 -1 那么这是错误情况。如何从 WEXITSTATUS(childStatus)中的子进程获得成功(EXIT_SUCCUSS)?

waitpid 中的 childStatus 和 WEXITSTATUS(childStatus) 的返回值有什么区别?一样吗?

0 投票
1 回答
2553 浏览

c - 选择waitpid/wait/waitid哪一个?

我想在 fork 后在子进程中使用 execl。execl 将执行大约需要 120 秒时间的脚本。我尝试了几乎所有与 waitpid、wait 和 waitid 的组合以及不同的参数(0、WNOHANG 等),但在所有情况下我都得到 -1 返回值。所以我想知道何时需要使用哪个等待功能?所以我可以专注于一个等待函数来让它工作。

我从日志中观察到的另一件有趣的事情是,当我在子进程中什么都不做时,它会将我的父线程显示为孤立的。不知道怎么可能?我的父线程如何成为孤立线程?

0 投票
0 回答
905 浏览

c - 在 waitpid 之后使用 strerror(errno)。strerror 的预期结果是什么?

我尝试使用 strerror(errno) 获取 waitpid 结果字符串。
我检查了两种情况下的状态字符串:

我从 strerror 得到以下打印:

孩子跑步时:

孩子终止:

waitpid 之后 strerror(errno) 的预期结果字符串应该是什么。如果孩子正常退出/终止,那么“无子进程”是什么意思?如果子进程正在运行/子进程终止,waitpid 的预期返回值应该是多少?

在我的例子中,strerror 返回:

使用的代码:

输出/输出:

无睡眠的 O/P:

0 投票
3 回答
3137 浏览

c - 等待子进程终止或不终止 - C

我正在尝试为我的一门课做作业,但没有教授/同学回复我。所以在你回答之前,请不要给我任何确切的答案!只有解释!

我要做的是编写一个接受两个命令行参数W和T的ac程序(timeout.c),其中W是子进程在退出之前应该花费的时间量,T是时间量在终止子进程并打印出“超时”消息之前,父进程应该等待子进程。基本上,如果 W > T,应该有一个超时。否则,孩子应该完成它的工作,然后不会打印超时消息。

我想做的只是让父进程休眠 T 秒,然后杀死子进程并打印出超时,但是在这两种情况下都不会打印出超时消息。如何检查子进程是否已终止?有人告诉我为此使用 alarm(),但是我不知道该函数的用途。

这是我的代码,以防有人想看一下:

0 投票
1 回答
462 浏览

c - 不想立即删除终止的子进程,需要变成僵尸

我从SE QUE获得了以下信息 将 SIGCHLD 的配置显式设置为 SIG_IGN 会导致任何随后终止的子进程立即从系统中删除,而不是被转换为僵尸。

据我所知,要读取子状态,进程表中需要有子 pid。所以有必要在进程表中有僵尸子进程来读取子状态。

所以我想编写信号处理程序,它将删除“将 SIGCHLD 的处置设置为 SIG_IGN”

我使用下面的代码(在 fork 之前)来避免在终止后立即删除子进程:但我仍然无法获得子进程并且 waitpid 使用 ECHILD 返回 -1。

请提出一些想法,我被这个阻止了。

0 投票
2 回答
7371 浏览

linux - 什么信号(SIGCHLD,SIG_DFL);意思是?

我没有SIGCHLD在我的代码中处理。终止后我的进程仍然被立即删除。我希望它成为僵尸进程。

如果我设置SIGCHLDSIG_DFL那时,它会工作吗?我该如何SIGCHLD设置SIG_DFL

我想让进程变成僵尸,所以我可以在waitpid.

0 投票
0 回答
128 浏览

c++ - waitpid 的早期调用未正确收集退出状态


我正在使用以下代码来分叉一个进程并发出信号让它稍后停止。

此代码打印(如预期):
给测量过程一些时间来清理。
完成测量。
测量过程返回 42。

但是,如果我在 kill 语句之后省略 sleep 语句,我会得到:
给测量过程一些时间来清理。
测量过程由信号 80 终止。
完成测量。

为什么结果取决于我是否等待三秒钟?waitpid 不应该等到孩子回来吗?这对我的应用程序(现在)并不重要,但我想了解如何正确地做到这一点。我想通知子进程停止,然后等到它“正确”完成。

谢谢你的帮助,
卢茨