问题标签 [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.
c - waitpid 与 execl 用于子级返回 -1 与 ECHILD?
waitpid
如果我execl
在可能需要时间完成的子进程中使用,我什么时候需要使用?
当我waitpid
在父级中使用时,它告诉我子级正在运行,因为 from 的返回值为waitpid
0。但是,如果我waitpid
在一段时间后在另一个函数中调用,它会返回 -1 并errno
设置为ECHILD
。waitpid
如果我不确定孩子是否完成了,我应该什么时候使用?
linux - Linux、waitpid、WNOHANG、子进程、僵尸
我将我的程序作为守护进程运行。
父进程只等待子进程,当它意外死亡时,fork 并再次等待。
但是当子进程被 -9 信号杀死时,子进程进入僵尸进程。
waitpid
应该立即返回子进程的pid!
但是waitpid
大约90秒后得到了pid号,
这是父亲的踪迹
父亲没有卡住,总是调用wait4。
大约 90 秒后,父亲得到了 SIGCHILD,wait4 返回了死去孩子的 pid。
为什么子进程没有立即退出?反而意外地变成了丧尸。
c - execl 之前的打印在输出中不可见
输出:
现在,如果我将在父级中删除 sleep(5) 则输出:
最后,我尝试使用 0 作为 waitpid 而不是 WNOHANG 的第三个参数,然后它给了我下面的输出以及任何孩子的打印:
有人可以帮助我了解执行 execl 之后和执行之前进程的行为吗?
c - WEXITSTATUS(childStatus) 返回 0 但 waitpid 返回 -1
据我所知,如果 waitpid 返回 -1 那么这是错误情况。如何从 WEXITSTATUS(childStatus)中的子进程获得成功(EXIT_SUCCUSS)?
waitpid 中的 childStatus 和 WEXITSTATUS(childStatus) 的返回值有什么区别?一样吗?
c - 选择waitpid/wait/waitid哪一个?
我想在 fork 后在子进程中使用 execl。execl 将执行大约需要 120 秒时间的脚本。我尝试了几乎所有与 waitpid、wait 和 waitid 的组合以及不同的参数(0、WNOHANG 等),但在所有情况下我都得到 -1 返回值。所以我想知道何时需要使用哪个等待功能?所以我可以专注于一个等待函数来让它工作。
我从日志中观察到的另一件有趣的事情是,当我在子进程中什么都不做时,它会将我的父线程显示为孤立的。不知道怎么可能?我的父线程如何成为孤立线程?
c - 在 waitpid 之后使用 strerror(errno)。strerror 的预期结果是什么?
我尝试使用 strerror(errno) 获取 waitpid 结果字符串。
我检查了两种情况下的状态字符串:
我从 strerror 得到以下打印:
孩子跑步时:
孩子终止:
waitpid 之后 strerror(errno) 的预期结果字符串应该是什么。如果孩子正常退出/终止,那么“无子进程”是什么意思?如果子进程正在运行/子进程终止,waitpid 的预期返回值应该是多少?
在我的例子中,strerror 返回:
使用的代码:
输出/输出:
无睡眠的 O/P:
c - 等待子进程终止或不终止 - C
我正在尝试为我的一门课做作业,但没有教授/同学回复我。所以在你回答之前,请不要给我任何确切的答案!只有解释!
我要做的是编写一个接受两个命令行参数W和T的ac程序(timeout.c),其中W是子进程在退出之前应该花费的时间量,T是时间量在终止子进程并打印出“超时”消息之前,父进程应该等待子进程。基本上,如果 W > T,应该有一个超时。否则,孩子应该完成它的工作,然后不会打印超时消息。
我想做的只是让父进程休眠 T 秒,然后杀死子进程并打印出超时,但是在这两种情况下都不会打印出超时消息。如何检查子进程是否已终止?有人告诉我为此使用 alarm(),但是我不知道该函数的用途。
这是我的代码,以防有人想看一下:
c - 不想立即删除终止的子进程,需要变成僵尸
我从SE QUE获得了以下信息 将 SIGCHLD 的配置显式设置为 SIG_IGN 会导致任何随后终止的子进程立即从系统中删除,而不是被转换为僵尸。
据我所知,要读取子状态,进程表中需要有子 pid。所以有必要在进程表中有僵尸子进程来读取子状态。
所以我想编写信号处理程序,它将删除“将 SIGCHLD 的处置设置为 SIG_IGN”
我使用下面的代码(在 fork 之前)来避免在终止后立即删除子进程:但我仍然无法获得子进程并且 waitpid 使用 ECHILD 返回 -1。
请提出一些想法,我被这个阻止了。
linux - 什么信号(SIGCHLD,SIG_DFL);意思是?
我没有SIGCHLD
在我的代码中处理。终止后我的进程仍然被立即删除。我希望它成为僵尸进程。
如果我设置SIGCHLD
到SIG_DFL
那时,它会工作吗?我该如何SIGCHLD
设置SIG_DFL
?
我想让进程变成僵尸,所以我可以在waitpid
.
c++ - waitpid 的早期调用未正确收集退出状态
我正在使用以下代码来分叉一个进程并发出信号让它稍后停止。
此代码打印(如预期):
给测量过程一些时间来清理。
完成测量。
测量过程返回 42。
但是,如果我在 kill 语句之后省略 sleep 语句,我会得到:
给测量过程一些时间来清理。
测量过程由信号 80 终止。
完成测量。
为什么结果取决于我是否等待三秒钟?waitpid 不应该等到孩子回来吗?这对我的应用程序(现在)并不重要,但我想了解如何正确地做到这一点。我想通知子进程停止,然后等到它“正确”完成。
谢谢你的帮助,
卢茨