- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我最近一直在与以下概念作斗争,但我仍然无法理解它。我有这段代码
int foo(int f){
int fail = 10; //some random initialization value
int status;
pid_t child_pid;
child_pid = fork();
if(child_pid == 0) {
/* This is done by the child process. */
if (execvp(tokens2[0], tokens2)<0){
fail =1;
perror(tokens2[0]);
exit(1);
}
}else if(child_pid<0){
perror("Fork failed");
exit(1);
} else {
waitpid(child_pid, &status, WUNTRACED);
}
//handle execvp error return value
if (fail == 1){
return -1;
}else{
return 0;
}
}
它没有多大意义(不要介意 tokens2[]
数组,它已正确声明并且工作得很好),因为它采用抽象形式,以便它能够清晰易懂。问题是:函数foo
的输出是什么?这就是我到目前为止所得到的:
1)If
execvp
succeeds, it does not return any value. If it fails it returns-1
(I think this return value does not have to do anything with myfoo
function).2)
exit(1)
kills the child process and returns the control flow to the parent.
根据我的理解,如果execvp
成功,foo
应该返回-1
(根据变量fail
),如果失败,它应该返回 0
,但这不是我的 printf
在 main 函数上检查显示的内容。其实结果总是和我想象的相反。
PS:我发现了一些关于使用古老的shelf-pipe技巧进行execvp
错误处理的信息,但它对我来说太吵了。我想要一种更简单的方法来处理错误。
最佳答案
The question is: what is the output of function foo?
您似乎在问 foo()
的返回值是多少。 “输出”通常是指写入终端或外部文件的数据。但问题仍然存在:在哪个过程中?假设fork()
成功后,您将拥有两个几乎相同的进程,都执行 foo()
.
1)If execvp succeeds, it does not return any value.
如果
execvp()
成功,它根本不返回。If it fails it returns -1 (I think this return value does not have to do anything with my foo function).
是的。只有您的子进程执行
execvp()
但是,如果它返回,该进程最终会调用exit()
.2)exit(1) kills the child process and returns the control flow to the parent.
在进程从
foo()
返回之前终止该进程。 ,所以在子进程中foo()
永远不会返回,是否execvp
成功与否。控制不会返回到父级。 fork 进程与调用函数完全不同。家长可以通过waitpid()
了解 child 的退出代码称之为使。在父级中,如果
fork()
然后该进程也会失败,调用exit()
因此不会从foo()
返回。假设fork()
成功,另一方面,父进程会等待,直到子进程终止。子进程是一个单独的进程,拥有自己的所有变量副本,因此无论它对fail
的副本做了什么,对 parent 没有影响。也就是说, fork 子进程也不像在同一进程中启动线程。由于父级本身不修改
fail
,如果达到的话,它仍然有其初始值 10if (fail == 1){
10 != 1,所以如果
foo()
确实返回则返回0。
关于c - execvp() - exit() 函数中的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54226466/
我相信所有这些(甚至是 die() 或 die(0))都是相同的。如果它们不相同,那么哪个更适合成功退出脚本?如果它们相同,是否有任何首选标准表明脚本成功完成?我倾向于使用 exit;. 编辑:所有答
我想知道Java中以下之间的区别 System.exit(0);System.exit(-1);System.exit(1); 我什么时候必须适本地使用上面的代码?
我注意到 Powershell 中有一个奇怪的行为。有两个 .ps1 文件: main.ps1: echo "running exit.ps1" $myexitcode = & ".\exit.p
Anylogic Process Modeling Library 中很少有像“Source”这样的 block 具有“On exit”和“On at exit”这样的操作。两者有什么区别? 我试图创
所以我有这个 Bash 脚本: #!/bin/bash PID=`ps -u ...` if [ "$PID" = "" ]; then echo $(date) Server off: no
(gdb) info symbol exit exit in section .text of /lib64/libc.so.6 (gdb) info symbol _exit _exit in se
如果我想启动一个简单的应用程序,几周前我使用它没有出现错误,我会收到错误消息。那是他的错误描述: Launching lib\main.dart on SM J530F in debug mode..
这个问题已经有答案了: Using Platform.exit() and System.exit(int) together (3 个回答) 已关闭 5 年前。 这里有人建议使用后者。我是java新
我的理解是,在 bash 中,一个普通的 exit 将完成一个具有最后一个命令的退出状态的脚本。但我也看到有人使用 exit $? 并且当我建议它具有相同的行为时被质疑。 这两个脚本之间有什么有意义的
我看到一些代码是这样做的: if(something){ echo 'exit from program'; die; } ...more code 和其他只使用 die 的人: if
exit和exit有什么区别!在 ruby 中? 最佳答案 一些事情: 退出处理程序以“退出”形式而非“退出!”形式运行。这意味着分配给“清理”的任何代码都不会使用“退出!”运行 “退出状态”在“退出
我们有一堆 .bat构建脚本由基于 PowerShell 的 GitLab 运行程序调用,这些脚本最近从以下内容重构: program args if !errorlevel! neq 0 exit
我想关闭具有指定返回码的 javafx 应用程序。浏览 SO 上的答案,我发现了以下成语: Platform.exit(); System.exit(0); 例如这里: Stop threads be
exit 和 C++ 中的 std::exit 有什么区别?我已经对其进行了研究,但我找不到任何东西。 这两个代码有什么区别: 1: if(SDL_Init(SDL_INIT_EVERYTHING)
我需要一个替代方法来在线程函数内终止 python 脚本。我的意图是在客户端输入 0 时终止服务器...这是否不起作用,因为线程尚未终止?这是我的代码: socket = socket.socket(
我想在崩溃后重新启动应用程序。我正在使用下面的代码来执行该任务。 Intent mStartActivity = new Intent(HomeActivity.this, SplashScreen
在Delphi中,你可以退出一个函数并给它一个返回值,这与C/C++/Java/C#等中的return关键字非常相似 Exit(1); 但是,我通常会写这样的内容: Result := 1; Exit
我想知道是否有任何方法可以处理浏览器退出事件。 例如,我想在用户单击交叉退出或关闭浏览器时发送查询。 最佳答案 我想我已经找到了解决办法。我没有在 IE 上测试过它,但它似乎在 Firefox 上运行
我在 Archlinux 的 mkinitcpio 脚本中找到了以下代码片段。 cleanup() { if [[ $workdir ]]; then # when PRESE
我使用以下代码计算数据帧所有行之间的余弦相似度: from pyspark.ml.feature import Normalizer from pyspark.mllib.linalg.distrib
我是一名优秀的程序员,十分优秀!