问题标签 [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 - Ubuntu 中的 wait() 函数
我正在 Ubuntu 中学习进程及其行为,但我对 wait() 有点困惑。所以我的问题是:
- while(wait(NULL)>0);语句如何 正在工作中?
- wait()中NULL的目的是什么?
我已经在终端中看到了输出,但是即使它执行了 wait() 函数,父级也在执行并生成子级。父级执行不应该停止吗?这是代码:
}
我知道这是一个非常蹩脚的问题,但这是人们学习的方式:)
谢谢
fork - 为什么要在父级中 fork() 然后 wait() ?
我知道 fork()、wait()、waitpid()、僵尸进程……我通过阅读 W. Richard Stevens 这本非常好的书来理解它们。
如果我们不在父母中调用 wait() ,孩子在终止后会变成僵尸......这很糟糕!
如果我们在 parent 中调用 wait(),则 parent 等待 child 终止,接收终止状态然后继续。写?
我已经经历了许多调用 fork() 一次然后在父级中调用 wait() 的示例。
但是,如果父母要等待孩子并在孩子终止后继续,那么就没有实际的多任务处理(技术上是的,有两个进程。但逻辑上没有用)那我们为什么在这里调用 fork() 呢?
我们可以先编写子代码,然后编写父代码,而不是 fork() 和 wait() 作为单个进程...不是更好吗?
谢谢!
linux - 子进程相互等待
我创建了三个进程,我想同步他们的工作。具体来说,我希望第一个进程等待第二个,第二个等待第三个。基本上以创建它们的相反顺序执行它们。
这是我到目前为止所做的。
我正在使用 i 检查我所在的子进程,因为我假设我在子进程中得到了正确的 i,所以如果 i = 0,我实际上是第一个子进程。这个假设是真的吗?在任何情况下,我都没有得到我想要的顺序,实际上这些进程是按照它们的自然顺序执行的,绕过了我放置的 waitpid 调用。有任何想法吗?
c - 使用系统调用 fork() execvp() wait() pipe() 实现多管道 - 它根本不起作用
我需要实现我的外壳来处理多个管道命令。例如,我需要能够处理这个:ls | grep -i cs340 | sort | uniq | cut -c 5
. 我假设问题是我没有将上一个命令的输出传递给下一个命令的输入。当我执行我的代码时,它没有给我任何输出。我正在使用这个伪代码:
这是处理多个管道的函数的源代码。
功能execvp()
采用结构数组。我检查了我所有的解析部分,它工作正常。这是execute_multiple_commands()
我遇到问题的功能。
这是结构的代码:
c++ - waitpid/wexitstatus 返回 0 而不是正确的返回码
我有下面的辅助函数,用于在 posix 系统上执行命令并获取返回值。我曾经使用,但如果应用程序在/有机会完成其工作之前运行并退出,popen
则无法获取应用程序的返回码。popen
popen
pclose
下面的辅助函数创建一个进程分支,用于execvp
运行所需的外部进程,然后父进程waitpid
用于获取返回码。我看到它拒绝运行的奇怪情况。
wait
当使用=调用时true
,waitpid
无论如何都应该返回应用程序的退出代码。但是,我看到stdout
指定返回码不为零的输出,但返回码为零。在常规 shell 中测试外部进程,然后echo
ing$?
返回非零,因此外部进程没有返回正确的代码不是问题。如果有任何帮助,正在运行的外部进程是mount(8)
(是的,我知道我可以使用mount(2)
,但除此之外)。
我提前为代码转储道歉。其中大部分是调试/记录:
请注意,该命令使用正确的参数运行正常,该函数继续运行,没有任何问题,并WIFEXITED
返回TRUE
. 但是,WEXITSTATUS
当它应该返回其他东西时,返回 0。
c - waitpid 错误用法?
我正在尝试从父进程访问分叉子进程的退出状态,但我得到了奇怪的答案。有时,我得到 256 或有时我得到一个负数,具体取决于我指定 &status 还是仅指定 status。我知道我真的很亲近。有人可以为我提供一点帮助,我将如何获得 EXIT_STATUS
这是我的代码
c++ - Linux、waitpid、WNOHANG 和僵尸
我需要能够:
- fork 一个进程并使其成为 execvp(我这样做了)
- 检查子进程execvp是否成功(不知道如何)
- 检查子进程是否完成(有问题)
我正在分叉一个进程,我没有任何方法可以检查孩子的 execvp 是否有效。如果它失败了,我需要能够知道它失败了。目前我正在使用
但似乎如果 pid 进程的 execv 失败,waitpid 不会返回 -1。
我怎么能检查呢?我阅读了 waitpid 手册页,但我不清楚;也许我的英语不够好。
编辑:为了解释更多:
我正在为家庭作业构建自己的终端。我需要输入一个命令字符串,比如说“ls”,然后我必须执行命令。
孩子分叉后,孩子调用 execvp 以执行命令(在我解析字符串之后),父母需要检查命令末尾是否有'&'。
如果命令末尾不存在符号“&”,则父级需要等待子级执行。
所以我需要知道 execvp 是否失败。如果它没有失败,那么父母使用 waitpid 等待孩子完成它的执行。如果失败,则父母将不会等待孩子。
c - fork/exec/waitpid 问题
我试图通过检查 waitpid() 的结果来确定执行是否失败。但是,即使我运行一个我知道失败的命令并将问题写入 stderr,下面的检查也不会注册。这段代码可能有什么问题?
谢谢你的帮助。
c - 使用waitpid在后台运行进程?
如果在命令末尾找到“&”,我正在尝试模仿在后台运行进程的 bash 功能。我有以下功能......而且我认为它没有做我想做的事情
如果我只是运行“ls -l”,它会按预期工作..但是如果我想在后台运行 ls..并且让程序继续接受新命令,我调用该函数并将背景标志设置为 1,我希望它在后台运行进程,告诉我它已经创建了进程..然后提示接受下一个命令。