- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
查看 this post我不明白凯勒姆的回答。我有两个问题。
1)她/他想要使用变量“count”来计算从 fork 产生的进程总数(即子孙等+原始进程的总数)。我看到她/他首先在父进程中将 count 设置为 1,这是有意义的(对父进程进行计数),但随后她/他在子进程中再次将 count 设置为 1。为什么这是有道理的? Count 已设置为 1,这只会将 count 再次设置为 1。
count += WEXITSTATUS(status);
2)我一直在调查WEXITSTATUS,据我所知,它通过退出返回进程的退出状态。我的问题是我必须使用
exit(0)
或
exit(1)
或者其他让它工作的东西。这方面的文档并不清楚。换句话说,它可以像 Kaylum 的
为了方便起见,这里有完整的代码段:
#include <stdio.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
int main(void)
{
pid_t before_pid, after_pid;
pid_t forked_pid;
int count;
int i;
int status;
before_pid = getpid();
count = 1; /* count self */
for (i = 0; i < 3; i++) {
forked_pid = fork();
if (forked_pid > 0) {
waitpid(forked_pid, &status, 0);
/* parent process - count child and descendents */
count += WEXITSTATUS(status);
} else {
/* Child process - init with self count */
count = 1;
}
}
after_pid = getpid();
if (after_pid == before_pid) {
printf("%d processes created\n", count);
}
return (count);
}
最佳答案
I see that S/he starts off by setting count to 1 in the parent process which makes sense (to count the parent) but then S/he sets count to 1 again in the children. Why does this make sense? Count is already set to one and this only sets count equal to 1 again.
否则,循环中创建的每个子进程的 count
值可能大于 1
。请记住,fork()
会从当前状态复制进程。因此,对于循环中任何给定的 fork()
,count
不一定为 1。如果您在 中打印
部分,你很容易理解这一点。count
的值, >else
I have been investigating WEXITSTATUS and from what I can gather it returns the exit status of a process through exit. My question is do I have to use exit(0) or exit(1)?
这就是 return(count)
from 的作用。从 main 返回相当于调用 exit
即 exit(count);
。
请注意,this answer 通过 exit()
状态传递计数。 exit status 值历来限制为 8 位值。因此,在大多数情况下,对于任何大于 8 的 i
值,它可能无法按预期工作平台。
关于c - 使用 WEXITSTATUS 从 fork() 调用中检索进程总数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46993402/
我正在尝试弄清楚以下代码的作用: int main() { int value = 3; if (fork() != 0) { wait(&value)
以下代码将等待子进程完成,然后打印其返回码。 int status; wait(&status); cout << "return code = " << WEXITSTATUS(status) <<
我正在 fork 一个进程并使用 execl 运行 wc 命令。现在,在正确的参数下,它运行良好,但是当我给出错误的文件名时,它会失败,但在这两种情况下,返回值WEXITSTATUS(状态)始终为 0
我正在尝试了解 WEXITSTATUS(status) 的工作原理。我遇到过一段代码,其中 WEXITSTATUS(status) 的返回值被添加到一个变量中。 这是片段: waitpid(-1, &
我正在尝试使用 popen() 获取子进程的存在状态。 案例一:调用函数时shell命令返回错误。这按预期工作。 func("du -sh _invalid_file_"); 输出: du: cann
我有下面的代码,但我需要 exit(status) 返回一个 float ,但 WEXITSTATUS 没有收到 float ,因为状态必须是 int,那么什么是请问解决办法? scanf("%f%f
我读了这个code在unix系统函数的实现中(问题8.22): int status; if (wait(&status) > 0) { if
当执行这段操作系统代码时,我收到信息“Exited with value 255”。我通过键盘收到命令,并且我知道该字符串是正确的。当我收到错误消息时,编程不显示(例如)键盘收到的 ls -l
我正在尝试获取子进程的退出代码。在 Linux 和 FreeBSD 上,我可以这样做: [0] [ishpeck@kiyoshi /tmp]$ uname FreeBSD [0] [ishpeck@k
我有一个命令和一些输入,在命令行上运行时将返回错误,相关错误代码为 1: $ foo bar [some useful error message...] $ echo $? 1 我正在尝试使用 wa
查看 this post我不明白凯勒姆的回答。我有两个问题。 1)她/他想要使用变量“count”来计算从 fork 产生的进程总数(即子孙等+原始进程的总数)。我看到她/他首先在父进程中将 coun
我有下面的辅助函数,用于在 posix 系统上执行命令并获取返回值。我曾经使用 popen , 但不可能通过 popen 获取应用程序的返回码如果它在 popen 之前运行并退出/pclose有机会完
我正在开发一个使用 fork() exec() wait() 的 C 程序。第一个进程有以下代码: int main(int argc, const char * argv[]) { // inser
当谈到按位数学时,我只是一个新手 - 如果这甚至是正确的术语 - 并且正在寻找一种更好的方法来对 int 求和返回代码进行逻辑处理(这是各种 Unix 程序的标准)。 IE。返回码可以是 1,2,4,
很抱歉,我不熟悉 fork() 的机制,所以答案可能很简单。详细说明我的问题,如果我多次运行 fork(),比如使用 for 循环,并且我使用 WEXITSTATUS(status) 从 child
下面的代码片段可以编译, #include #include #include int main() { int ret = 0xFFFF; std::cout #include #
我在子进程中以 -1 退出,但父进程选择了 255。有没有办法让 parent 识别-1?这是我的代码 pid = fork(); // if fork fails if (pid < 0
我正在使用以下代码来使用父/子运行一些命令: int nStatus = 0; int nRet = 0; pid_t pid = -1; char *envp[] = { "
据我所知,如果 waitpid 返回 -1 那么它就是错误条件。如何从 WEXITSTATUS(childStatus) 中的子进程获得成功 (EXIT_SUCCUSS)? waitpid 中的 ch
我正在为大学做一个练习,我必须在退出时返回一个值,这个值实际上是某种东西的计数。这可能高于 255(exit() 无法处理),但老师建议使用计数永远不会超过该值的测试数据。 在这之后,我需要处理这个计
我是一名优秀的程序员,十分优秀!